MongoDB字段限制在数组中

时间:2015-02-21 19:00:31

标签: mongodb aggregation-framework

我正在寻找一种方法 - 如果可能的话,甚至现在都不行 - 只是为了返回保存在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中字段限制的任何参考。

2 个答案:

答案 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" 
    } 
}