如何在嵌入式数组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中查询嵌入式文档的主要内容,如果未能解决你的问题,请参考以下文章