【问题标题】:Pymongo finding all Mongo records where value is between two mongo index valuesPymongo 查找值在两个 mongo 索引值之间的所有 Mongo 记录
【发布时间】:2021-10-25 19:53:08
【问题描述】:

我有一个值列表

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,它们一起包含列表 @987654324 中的所有值@。在上述情况下,record1record2 将被返回。值[5,6,7,8] 将对应于record1,因为它介于StartValueEndValue 之间,包括EndValuerecord2 被返回,因为 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

【问题讨论】:

    标签: python python-3.x mongodb pymongo


    【解决方案1】:

    您可以从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

    【讨论】:

      猜你喜欢
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多