我的问题是:我的结构类似于:
{ id: 1, participants: [ { name: "joe", status: 0 }, { name: "james", status: 2} ], content: "mongomongo" } { id: 2, participants: [ { name: "joe", status: 1 }, { name: "jordan", status: 3} ], content: "dongodongo" }
我想要做的是运行一个与此几乎相同的查询:
db.find({ '_id': { $in: someArray}}, { participants: {$elemMatch: {'name': someName }}}
我会为$ in指定一个对象ID数组,然后我会提供一个用户名。会发生什么事情会让我回复两个对象,但参与者数组只有$ elemMatch找到的条目:
{ id: 1, participants: [ { name: "joe", status: 0 } ] } { id: 2, participants: [ { name: "joe", status: 1 } ] }
这就是我想要的,但我不想要的部分是它遗漏了其他字段(即content
)。如何调整查询,使其仍然返回参与者数组中的一个字段,还返回其他字段,如内容?
提前谢谢!
答案 0 :(得分:5)
实际上找到了我的问题的解决方案。只需要调整我使用的原始查询。因为我使用Mongoose来管理mongodb交互,所以我混淆了投影字段和选项字段。
以下是有效的查询:
db.find({ '_id': { $in: someArray}}, { participants: {$elemMatch: {'name': someName }}, content: 1, [anything] : 1});
答案 1 :(得分:2)
修改强>
我误解了原帖和例子。如果您担心返回的唯一其他字段是“内容”,那么您可以将其添加到投影参数中,如下所示:
db.collection.find(
{
'_id': {
$in: someArray
}
},
{
'participants': {
$elemMatch: {
'name': someName
}
},
'content' : 1
}
)
希望这有帮助!