我的收藏就像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"}
返回
答案 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"
}}
])