繁体   English   中英

如何查询嵌入数组中的嵌入文档 mongodb

[英]How to query embedded documents in an embedded array mongodb

我从 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 //]
  }
]

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

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

(发送单个帖子_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)或在必要时进行必要的修改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM