$nin with the $expr

微笑、不失礼 提交于 2020-01-30 05:16:15

问题


I have a query to find if a user CreatedBy is in a SharedWith. I want to inverse the query to check if the CreatedBy is not in SharedWith.

[
    {
        "$match": {
            "$and": [
                {
                    "$and": [
                        {
                            "SharedWith": {
                                "$exists": true
                            }
                        },
                        {
                            "$expr": {
                                "$in": [
                                    "$CreatedBy",
                                    "$Multi_User"
                                ]
                            }
                        }
                    ]
                }
            ]
        }
    }
]

MongoDB does not support a direct $nin or $not for $and query.

Any idea how to achieve this.

The user document looks like this,

   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"},
         ]}

    ]

回答1:


$nin is an query operator not an aggregation operator and also $expr only supports the aggregation operators not the query ones. So, You should probably use $not $in with the $expr expression in this manner

{
  "$match": {
    "$and": [
      {
        "$or": [
          {
            "Multi_User": {
              "$exists": False
            }
          },
          {
            "$expr": {
              "$not": { "$in": ["$CreatedBy", "$Multi_User"] }
            }
          }
        ]
      }
    ]
  }
}


来源:https://stackoverflow.com/questions/53595227/nin-with-the-expr

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!