【问题标题】:How to query embedded documents in an embedded array mongodb如何在嵌入式数组mongodb中查询嵌入式文档
【发布时间】:2021-03-24 07:44:00
【问题描述】:

我从 mongodb 和 mongoose 开始。这就是我的数据库的样子

[
 {
  _id: "5fd0f98751e33831d8ef4899"
  date: "01/01/2020, 11:47:00 AM"
  groups: [
     {
       _id: "5fd0f98751e33831d8ef489a"
       name: "Eyob"
       profession: "doctor"
       posts: [
           { 
              _id: "5fd0f98751e33831d8ef489b"
              numberOfLikes: 16
              numberOfShares: "2 Shares"
           },
           { 
              _id: "5fd0f98751e33831d8ef489c"
              numberOfLikes: 26
              numberOfShares: "7 Shares"
           }
        
         ]
      },
      {
       _id: "5fd0f98751e33831d8ef489d"
       name: "Abel"
       profession: "teacher"
       posts: [
           { 
              _id: "5fd0f98751e33831d8ef489e"
              numberOfLikes: 16
              numberOfShares: "2 Shares"
           },
           { 
              _id: "5fd0f98751e33831d8ef489f"
              numberOfLikes: 26
              numberOfShares: "7 Shares"
           }    
         ]
      }

    ]

  },

  {
   _id: "5fd0f98751e33831d8ef489d"
   date: "01/02/2020, 11:47:00 AM"
   groups: [// an array of groups as the above one //]
  }
]

所以对于每个组数组都有一个组对象,其中包含一个包含帖子对象的帖子数组。('这可能会令人困惑')。我想要做的是使用唯一的 id 查询单个帖子和单个组。 findById() 返回空值。有没有一种方法可以让我只使用相应的 id 来查询这些对象。

【问题讨论】:

    标签: node.js mongodb mongoose mongodb-query mongoose-schema


    【解决方案1】:

    试试这个,它应该可以解决你的问题。

    (发送单帖_id 以获取您的预期数据)

    const {id}=req.params;
    YourDataModel.findOne({"groups.posts._id":id}, {"groups.posts._id.$":true})
    .then(data=>data?res.send({
                         groupId:data.groups[0]._id, 
                         groupName:data.groups[0].name, 
                         post:data.groups[0].posts.filter(e=>e._id===id)[0]
                }): res.send("Not found!"))
    .catch(err=>res.send(err))
    
    

    您也可以使用相同的代码获取该组的所有帖子(与该帖子相关),只需 res.send(data) 或在必要时进行必要的修改。

    【讨论】:

    • 好吧,如果它解决了您的问题,请将答案标记为解决方案(在答案开始的地方打勾)
    猜你喜欢
    • 2021-08-07
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 2016-10-26
    • 2011-05-15
    • 1970-01-01
    相关资源
    最近更新 更多