我有一个值列表
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
中的所有值。在上述情况下,将返回record1
和record2
。值[5,6,7,8]
对应于record1
,因为它介于StartValue
和EndValue
之间。返回record2
,因为myValues
的[9]
元素在record2
的StartValue
和EndValue
中。
我已经试过了:
myData = myMongoCollection.find({"index" : {"$gt" : current_time - datetime.timedelta(minutes=5)}, "$and" : {{"StartValue" : {"$gte" : {"$or" : myValues}}}, {"EndValue" : { "$lte" : {"$or" : myValues}}}} } )
编辑我尝试使用$gte
和$lte
来尝试捕获可能与StartValue
和EndValue
不匹配的数组值。由于这个原因,$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 }
}
]
})
游乐场