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
中。在上述情况下,将返回 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}}}} } )
Edit 我尝试使用 $gte
和 $lte
来尝试捕获可能与 StartValue
和 EndValue
。因此,$in
运算符将不起作用。例如,如果 myValues=[5,6,7]
,那么使用 $in
时 record1
将 而不是 返回。但是,在这种情况下,我也希望返回 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 }
}
]
})
我有一个值列表
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}}}} } )
Edit 我尝试使用 $gte
和 $lte
来尝试捕获可能与 StartValue
和 EndValue
。因此,$in
运算符将不起作用。例如,如果 myValues=[5,6,7]
,那么使用 $in
时 record1
将 而不是 返回。但是,在这种情况下,我也希望返回 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 }
}
]
})