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

Posted

技术标签:

【中文标题】如何在嵌入式数组mongodb中查询嵌入式文档【英文标题】:How to query embedded documents in an embedded array 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 来查询这些对象。

【问题讨论】:

【参考方案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) 或在必要时进行必要的修改。

【讨论】:

好吧,如果它解决了您的问题,请将答案标记为解决方案(在答案开始的地方打勾)

以上是关于如何在嵌入式数组mongodb中查询嵌入式文档的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB - 如何从集合中查询嵌入式文档

如何匹配 MongoDB 中嵌入式数组或文档中的字符串?

如何查询MongoDB的嵌入式数组

如何使用 mongodb 中的聚合在嵌入文档的数组中执行操作?

如何在 mongoDB 的嵌入式文档中提取特定元素

如何在 MongoDB 的嵌入式数组对象中插入 json 对象?