我在mongodb中存储了一些具有以下结构的文档:
{
"a":1,
"b":24.212,
"uup":"X243",
"fvp": [
{
"feature_id": 10,
"value": 180.157,
"units": "A"
},
{
"feature_id": 83,
"value": 180.042252,
"units": "mP",
},
{
"feature_id": 62,
"value": 0.234,
"units": ""
}
]
}
一般来说,我可能在数组fvp
中有几十甚至几百个元素。我想按如下方式进行搜索:
db.colX.find({"_id" : ObjectId("54b44b3bfeee5a13a43f34f0")});
但只获取fvp
中feature_id
在一系列值中的元素。例如,我想得到以下结果:
{
"":1,
" B":24.212,
" UUP":" X243&#34 ;,
" fvp":[
{
" feature_id":10,
"价值":180.157,
"单位":" A"
},
{
" feature_id":62,
"价值":0.234,
"单位":""
}
}
指定我只想使用fvp
获取"feature_id":10 OR "feature_id":62
的元素。无论如何这可能吗?似乎只需使用关键字feature_id
指定一个$elemMatch
即可完成此操作。这是一个例子:
db.colX.find(
{"_id" : ObjectId("54b44b3bfeee5a13a43f34f0")},
{
feature_value_pairs:
{$elemMatch: {feature_id: 10} }
}
);
问题#1:这会禁止显示文档的其他字段(例如a
,b
,uup
)。这可以避免吗?
当我想要指定我希望检索到的文档具有feature_id等于10和83的元素时,事情会变得更复杂。这是我试过的:
db.colX.find(
{"_id" : ObjectId("54b44b3bfeee5a13a43f34f0")},
{
feature_value_pairs:
{$elemMatch: {feature_id: { $in: [10, 83]}} }
}
);
但是,这只显示带feature_id:10
的元素。
问题#2:如何在mongodb中获得所需的结果?