2013-10-15 40 views
1

我面臨着與蒙戈殼UND春數據MongoDB的一個奇怪的behaviuor查詢浮動範圍MongoDB的:在陣列

這裏是我的示例查詢:

> db.substances.find({"precursor.mass": {$gte:159.9900,$lte:160.0100}}).count() 
6 

所以我想找到一個質量值給定範圍(正/負)。在這個例子中,輸入是160 +/- 0.01。

這裏有六個結果中的兩個。第一個是好的,但我無法解釋和理解爲什麼找到第二個結果。

{ 
"_id" : ObjectId("524bfe80729458abfd7698a5"), 
"exactMass" : 159.1259, 
"nominalMass" : 159, 
"molarMass" : 159.22, 
"status" : 1, 
"decompositions" : [ ], 
"precursor" : [ 
    { 
     "mass" : 160, 
     "ion" : "+H", 
     "charge" : "+", 
     "fragments" : [ 
      55, 
      83, 
      124, 
      97, 
      69, 
      142 
     ] 
    } 
], 
} 

{ 
"_id" : ObjectId("524bfe80729458abfd7695be"), 
"exactMass" : 159.068414, 
"nominalMass" : 159, 
"molarMass" : 159.19, 
"status" : 0, 
"decompositions" : [ ], 
"precursor" : [ 
    { 
     "mass" : 158.0611, 
     "ion" : "-H", 
     "charge" : "-", 
     "fragments" : [ ] 
    }, 
    { 
     "mass" : 160.0756, 
     "ion" : "+H", 
     "charge" : "+", 
     "fragments" : [ ] 
    } 
], 
} 

我忽略了什麼?我假設我使用錯誤的查詢?

我的目標是找到所有物質,其中任何前體質量在給定值+/-容差之間。

回答

2

mongo doc on find()

如果字段中包含的陣列,並且查詢具有多條件 運營商,因爲如果一個單一的陣列 元件滿足條件或組合的整體將匹配字段陣列元素符合 條件

所以,既然{"mass" : 158.0611}匹配第二查詢條件(小於160.0100),和{"mass" : 160.0756}匹配第一(大於159.9900),整個陣列相匹配。

什麼你要找的是$elemMatch

db.substances.find({ 
    "precursor": { 
    $elemMatch: { 
     mass: { $gt:159.9900, $lt:160.0100 } 
    } 
    } 
}).pretty()