【问题标题】:Match within a Range of two fields from an Array of Values在值数组的两个字段范围内匹配
【发布时间】:2018-04-10 00:48:02
【问题描述】:

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

我想看看这两个文件

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

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

在mongo/mongoose中是否有查询可以达到这个结果?

【问题讨论】:

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


    【解决方案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 条件。

    【讨论】:

      猜你喜欢
      • 2017-06-18
      • 2017-06-20
      • 1970-01-01
      • 1970-01-01
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多