Java MongoDB:查询数组上的浮动范围

Java MongoDB:查询数组上的浮动范围,java,javascript,spring,mongodb,Java,Javascript,Spring,Mongodb,我正面临mongo shell和Spring数据Mongodb的奇怪行为 以下是我的查询示例: > db.substances.find({"precursor.mass": {$gte:159.9900,$lte:160.0100}}).count() 6 所以我想找到给定范围内的质量值(正/负)。在本例中,输入为160+/-0.01 以下是六个结果中的两个。第一个是可以的,但我无法解释和理解为什么会发现第二个结果 { "_id" : ObjectId("524bfe80729458a

我正面临mongo shell和Spring数据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" : [ ]
    }
],
}
我忽略了什么?我想我使用了一个错误的查询

我的目标是找到任何前体质量在给定值+/-公差之间的所有物质。

来自:

如果字段包含数组,并且查询具有多个条件 运算符,如果单个数组中有一个 元素满足条件或数组元素的组合满足条件 条件

因此,由于
{“mass”:158.0611}
匹配第二个查询条件(小于160.0100),并且
{“mass”:160.0756}
匹配第一个查询条件(大于159.9900),所以整个数组匹配

您需要的是:

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