mongodb - 如何从文档中的对象数组中仅获取一个与搜索条件匹配的对象?
问题描述
我有一组具有如下数据结构的主题:
{
topicId:"LSCv0mnb" ,
posts:[
{
postId: "nNP8UDxL",
createdBy: "Sam"
},
{
postId: "aJ8UxLa",
createdBy: "Bob"
}
]
}
{
topicId:"hlsTOgAX" ,
posts:[
{
postId: "E3cJa0Nm",
createdBy: "Samanta"
},
{
postId: "Rt0xQnAy",
createdBy: "Jessica"
}
]
}
就我而言,我只需要从帖子数组中获取特定帖子。所以我目前正在做的是我findOne
用来查找特定主题:
const topic = await this.db.collection('topics').findOne({ topicId: { $eq: topicId })
而不是我只是循环通过topic.posts
以下方式获取帖子postId
:
const post = topic.posts.find(post => post.postId === postId)
我有 2 个问题。
我可以查询 MongoDB 以仅从帖子数组中获取帖子而没有其他内容吗?例如,我有 atopicId
和 a postId
,我的预期返回值为:
{
postId: "E3cJa0Nm",
createdBy: "Samanta"
}
如果可以使用 MongoDB,那么从性能角度来看,在我的网络服务器上进行是否更好?
谢谢你。
解决方案
您可以使用聚合
$unwind
解构数组$match
匹配元素$replaceRoot
让它生根
这是代码
db.collection.aggregate([
{
"$unwind": "$posts"
},
{
"$match": {
"posts.postId": "E3cJa0Nm",
"posts.createdBy": "Samanta"
}
},
{
"$replaceRoot": {
"newRoot": "$posts"
}
}
])
工作Mongo游乐场