【问题标题】:PyMongo - How to ignore a parameter in queryPyMongo - 如何忽略查询中的参数
【发布时间】:2022-11-28 09:29:35
【问题描述】:

有没有办法在一行中使用 PyMongo 查询文档时忽略参数?例如:

db.find_one( { "first_name": firstname, "last_name": lastname, "age": age if age else <ignore this field from querying all together> } ):

【问题讨论】:

  • 您可以将 age 字段过滤器 "age": age if age else &lt;ignore ... 替换为:"$expr": { "$eq": [ "$age", { "$ifNull": [ age, "$age" ] } ] }

标签: mongodb mongodb-query pymongo


【解决方案1】:

$and$or 运营商合作。

  1. $and - 匹配1.1.1.2.条件。

    1.1.匹配first_namelast_name

    1.2. $or- 匹配age 变量为空或age 字段与age 变量匹配。

    db.find_one({
      $and: [
        {
          "first_name": firstname,
          "last_name": lastname
        },
        {
          $or: [
            {
              $expr: {
                $eq: [
                  null,
                  age
                ]
              }
            },
            {
              "age": age
            }
          ]
        }
      ]
    })
    

    Sample Mongo Playground

【讨论】:

    【解决方案2】:

    您可以尝试以下几种方法:

    filter = { "first_name": firstname, "last_name": lastname }
    if age:
        filter["age"] = age
    
    collection.find_one(filter)
    

    -或者-

    filter = { "first_name": firstname, "last_name": lastname }
    age_filter = { "$expr": { "$eq": [ "$age", { "$ifNull": [ age, "$age" ] } ] } }
    filter.update(age_filter)
    collection.find_one(filter)
    

    -或-(同上)

    collection.find_one({ "first_name": firstname, "last_name": lastname, "$expr": { "$eq": [ "$age", { "$ifNull": [ age, "$age" ] } ] } } )
    

    【讨论】:

      猜你喜欢
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      相关资源
      最近更新 更多