在数组值的两个字段范围内匹配

时间:2017-10-28 15:47:30

标签: javascript node.js mongodb mongoose mongodb-query

我有一组数字[111, 444, 777]

我想查看这两个文件

{
  _id: 1,
  lookHere: {rangeLow: 333, rangeHigh: 555}
},
{ 
 _id: 2,
  lookHere: {rangeLow: 222, rangeHigh: 333}
}

我想编写一个只返回第一个文档的查询,因为我的数字数组包括444,介于333和555之间。

是否有可以在mongo / mongoose中实现此结果的查询?

1 个答案:

答案 0 :(得分:1)

您需要$or个查询。您可以将源数组.map()放入$or的参数:

var inputs =  [111, 444, 777];

collection.find({
  "$or": inputs.map( n => ({ 
    "lookHere.rangeLow": { "$lt": n },
    "lookHere.rangeHigh": { "$gt": n }
  }) )
})

这基本上是要查看Low值是否小于且High是否大于每个当前元素,并且当任何匹配这两个条件时返回true。

请注意,除非另有说明,否则所有MongoDB查询参数都是隐式AND条件。