【问题标题】:Conditional query in mongoose猫鼬中的条件查询
【发布时间】:2021-08-30 11:06:21
【问题描述】:

示例文档

[
  {
    "_id": ObjectId("612b5d4bbc1bed7ce5d5oa66"),
    "username": "test",
    "user_details": {}
  },
  {
    "_id": ObjectId("612b5d4bbc1bed7ce5d5oa67"),
    "username": "test",
    "user_details": {
      "name": "Test",
      "addreess": "tets addr",
      "city": "nddj"
    },
    verify_at: ISODate("2021-08-30T10:23:37.558Z")
  }
]

如果 user_details 是空对象,我想获取这些记录,那么 verify_at 不应该存在并且 user_details 对象有一些值,那么不需要检查 verify_at 是否存在 false 这是我尝试过的

 $and:[{$or:[{$and:[{user_details:{}},{verify_at:{$exists:false}}]},{$and:{user_details:{$ne:{}}}}]}]

【问题讨论】:

    标签: mongodb mongoose mongodb-query mongoose-schema


    【解决方案1】:

    如果我理解正确,您可以使用以下查询:

    • 如果user_details 存在-> 查找元素而不检查verify_at
    • 如果user_details{},则检查verify_at 是否不存在。
    yourModel.find({
      "$or": [
        {
          "user_details": {
            "$ne": {}
          }
        },
        {
          "$and": [
            {
              "user_details": {}
            },
            {
              "verify_at": {
                "$exists": false
              }
            }
          ]
        }
      ]
    })
    

    例如here

    【讨论】:

    • 这里有一个疑问是如果我必须为其他列添加条件,那么它会起作用 yourModel.find({"name":"test",$and:[{"$or":[{ "user_details":{"$ne":{}}},{"$and":[{"user_details":{}},{"verify_at":{"$exists":false}}]}]}] })
    • 是的,它会起作用,检查this example。如果您愿意,也可以将值添加到$andexample
    猜你喜欢
    • 2018-10-10
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 2012-02-03
    • 1970-01-01
    • 2017-05-08
    相关资源
    最近更新 更多