我正在寻找一种方法 - 如果可能的话,甚至现在都不行 - 只是为了返回保存在mongodb中的列表的一部分。
让我们看看我目前的文件:
{
_id : 'MyId',
name : 'a string',
conversations : [
{
user : 'Mike',
input : 'Some input'
},
{
user : 'Stephano',
input : 'some other input'
}
]
}
我现在要做的就是像这样:
var myOutput;
myOutput = db.my_collection.find(
{
_id : 'MyId',
'conversations.user' : 'Mike'
}, {
_id : 1,
name : 1,
conversations : {
$where : {
user : 'Mike'
}
}
});
目标只是取回user
值为Mike
的会话数组项。
MongoDB中仍然可以使用吗?没有在文档中找到mongoDB中字段限制的任何参考。
答案 0 :(得分:2)
在投影中使用$ positional operator:
> db.my_collection.find({ "_id" : "MyId", "conversations.user" : "Mike" },
{ "_id" : 1, "name" : 1, "conversations.$" : 1 })
{
"_id" : 'MyId',
"name" : 'a string',
"conversations" : [
{ "user" : 'Mike', "input" : 'Some input' }
]
}
这只投影第一个匹配的数组元素。
答案 1 :(得分:1)
您是否了解aggregation pipeline?
db.my_collection.aggregate([
{ "$match": { "_id": "MyId"}}, { "$unwind": "$conversations"},
{ "$match": {"conversations.user": "Mike"}}
])
<强>输出强>
{
"_id" : "MyId",
"name" : "a string",
"conversations" :
{
"user" : "Mike",
"input" : "Some input"
}
}