我拥有的架构示例;
{ "_id" : 1234,
“dealershipName”: “Eric’s Mongo Cars”,
“cars”: [
{“year”: 2013,
“make”: “10gen”,
“model”: “MongoCar”,
“vin”: 3928056,
“mechanicNotes”: “Runs great!”},
{“year”: 1985,
“make”: “DeLorean”,
“model”: “DMC-12”,
“vin”: 8056309,
“mechanicNotes”: “Great Scott!”}
]
}
我希望只查询并返回值" vin" in" _id:1234"。任何建议都非常感谢。
答案 0 :(得分:2)
您可以使用带点符号的字段选择参数将输出约束到所需的字段:
db.test.find({_id: 1234}, {_id: 0, 'cars.vin': 1})
输出:
{
"cars" : [
{
"vin" : 3928056
},
{
"vin" : 8056309
}
]
}
或者如果您只想要一组vin
值,可以使用aggregate:
db.test.aggregate([
// Find the matching doc
{$match: {_id: 1234}},
// Duplicate it, once per cars element
{$unwind: '$cars'},
// Group it back together, adding each cars.vin value as an element of a vin array
{$group: {_id: '$_id', vin: {$push: '$cars.vin'}}},
// Only include the vin field in the output
{$project: {_id: 0, vin: 1}}
])
输出:
{
"result" : [
{
"vin" : [
3928056,
8056309
]
}
],
"ok" : 1
}
答案 1 :(得分:0)
如果通过查询,你的意思是在javascript中获取vins的值,你可以将json读入一个名为theString(或任何其他名称)的字符串中并执行以下操作:
var f = [],obj = JSON.parse(theString);
obj.cars.forEach(function(item){f.push(item.vin)});
如果上面的json是较大集合的一部分,那么你需要一个外循环。