Pymongo 查找值在两个 mongo 索引值之间的所有 Mongo 记录

Pymongo finding all Mongo records where value is between two mongo index values

我有一个值列表

myValues = [5,6,7,8,9]

我有记录如下

record1 = {"_id" : someID, "index" : datetime, "StartValue" : 1, "EndValue" : 8}
record2 = {"_id" : someID, "index" : datetime, "StartValue" : 9, "EndValue" : 16}
record3 = {"_id" : someID, "index" : datetime, "StartValue" : 17, "EndValue" : 24}
... 

现在,我想使用 find() 执行搜索查询,以便在返回的游标中包含一条或多条记录,其中返回的元素具有包含所有值的 StartValue 和 EndValue在列表 myValues 中。在上述情况下,将返回 record1record2。值 [5,6,7,8] 将对应于 record1,因为它介于 StartValueEndValue 之间并包括在内。返回 record2,因为 myValues 的元素 [9]record2StartValueEndValue.

我试过以下方法:

myData = myMongoCollection.find({"index" : {"$gt" : current_time - datetime.timedelta(minutes=5)}, "$and" : {{"StartValue" : {"$gte" : {"$or" : myValues}}}, {"EndValue" : { "$lte" : {"$or" : myValues}}}} } )

Edit 我尝试使用 $gte$lte 来尝试捕获可能与 StartValueEndValue。因此,$in 运算符将不起作用。例如,如果 myValues=[5,6,7],那么使用 $inrecord1 而不是 返回。但是,在这种情况下,我也希望返回 record1

您可以从 myValues 数组中获取最小和最大数字,并使用 $or 运算符检查 $gte$lte 两个属性的条件,

myValues = [5,6,7,8,9]
minValue = min(myValues)
maxValue = max(myValues)

myData = myMongoCollection.find({
  "index": {
    "$gt": current_time - datetime.timedelta(minutes=5)
  }, 
  "$or": [
    {
      "StartValue": { "$lte": minValue },
      "EndValue": { "$gte": minValue }
    },
    {
      "StartValue": { "$lte": maxValue },
      "EndValue": { "$gte": maxValue }
    }
  ]
})

Playground