返回仅从值数组中指定对象属性

时间:2014-06-12 12:52:30

标签: mongodb aggregation-framework

我的收藏就像Mongo一样。

{
    "_id": 123,
    version: 2,
    property: "toenail",
    options: [
        {"color": "blue", age: "15"},
        {"color": "black", age: "27"}
    ]
}, 
{
    "_id": 124,
    version: 12,
    property: "tooth",
    options: [
        {"color": "green", age: "5"},
        {"color": "yellow", age: "7"}
    ]
}, 
...

即。每个对象都有一个选项数组,其中每个选项都是一个对象文字。

我想找到年龄为" 15"的选项的颜色。

我做:

 db.saksMongoItem.find({"options.age":"15" })

但这给了我整个对象 - 一些噪音 为了缩小返回范围,我做了:

 db.saksMongoItem.find({"options.age":"15" }, {"options.color.$":1})

但是这给了我......

{ "_id" : NumberLong(123), "options" : [ { "color" : "blue", "age:15")]}

我有什么方法可以得到......

{"color": "blue"} 

返回

1 个答案:

答案 0 :(得分:1)

$运营商的错误立场:

db.saksMongoItem.find({"options.age":"15" }, {"options.$":1})

如果您只想要指定年龄的颜色,那么您需要使用聚合框架:

db.saksMongoItem.aggregate([
    { "$match": { "options.age":"15" } },
    { "$unwind": "$options" },
    { "$match": { "options.age":"15" } },
    { "$project": {
       "_id": 0,
       "color": "$options.color"
    }}
])