猫鼬中的条件查询

Conditional query in mongoose

示例文档

[
  {
    "_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 是否存在错误的 这是我试过的

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

如果我没理解错你可以使用这个查询:

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

示例here