mongodb从数组中选择一些元素

时间:2015-01-13 00:18:43

标签: mongodb

我在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")});

但只获取fvpfeature_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:这会禁止显示文档的其他字段(例如abuup)。这可以避免吗?

当我想要指定我希望检索到的文档具有feature_id等于10和83的元素时,事情会变得更复杂。这是我试过的:

db.colX.find(
  {"_id" : ObjectId("54b44b3bfeee5a13a43f34f0")},
  {
    feature_value_pairs: 
     {$elemMatch: {feature_id: { $in: [10, 83]}} }
  }
);

但是,这只显示带feature_id:10的元素。

问题#2:如何在mongodb中获得所需的结果?

0 个答案:

没有答案