$nin 与 $expr

Bha*_*avi 8 mongodb pymongo mongodb-query aggregation-framework

我有一个查询来查找用户CreatedBy是否在SharedWith. 我想逆查询,以检查是否CreatedBy在不SharedWith

[
    {
        "$match": {
            "$and": [
                {
                    "$and": [
                        {
                            "SharedWith": {
                                "$exists": true
                            }
                        },
                        {
                            "$expr": {
                                "$in": [
                                    "$CreatedBy",
                                    "$Multi_User"
                                ]
                            }
                        }
                    ]
                }
            ]
        }
    }
]
Run Code Online (Sandbox Code Playgroud)

MongoDB的不支持直接$nin$not用于$and查询。

任何想法如何实现这一点。

用户文档看起来像这样,

   Collection = [
        {"CreatedBy":
             {"_id": "User001",
              "Email": "user@eg.com",
              "Name": "User001"},
         "SharedWith": [
             {"_id": "User001",
              "Email": "user@eg.com",
              "Name": "User001"},
             {"_id": "User002",
              "Email": "user@eg.com",
              "Name": "User002"},
             {"_id": "User003",
              "Email": "user@eg.com",
              "Name": "User003"},
         ]}

    ]
Run Code Online (Sandbox Code Playgroud)

Ash*_*shh 9

$nin是查询运算符而不是聚合运算符,并且也$expr仅支持aggregation运算符而不是运算符query。所以,你应该使用与表达以这种方式$not $in$expr

{
  "$match": {
    "$and": [
      {
        "$or": [
          {
            "Multi_User": {
              "$exists": False
            }
          },
          {
            "$expr": {
              "$not": { "$in": ["$CreatedBy", "$Multi_User"] }
            }
          }
        ]
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)