$ нин с $ expr - PullRequest
       33

$ нин с $ expr

0 голосов
/ 03 декабря 2018

У меня есть запрос, чтобы найти, есть ли у пользователя CreatedBy значение SharedWith.Я хочу инвертировать запрос, чтобы проверить, находится ли CreatedBy в SharedWith.

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

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

    ]

1 Ответ

0 голосов
/ 03 декабря 2018

$nin является оператором запроса, а не оператором агрегирования, а также $expr поддерживает только операторы aggregationне query.Итак, вам, вероятно, следует использовать $not $in с $expr выражение таким образом

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