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



我有一个值列表

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}}}} } )

编辑我尝试使用$gte$lte来尝试捕获可能与StartValueEndValue不匹配的数组值。由于这个原因,$in运算符不能工作。例如,如果myValues=[5,6,7],那么record1而不是使用$in时返回。但是,我希望在这种情况下也能返回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 }
}
]
})

游乐场

最新更新