Запрос агрегации MongoDB Self Join - PullRequest
1 голос
/ 25 сентября 2019

У меня есть эти данные:

[
  { "_id": 1,  "B": 1, "C": 1 },
  { "_id": 2,  "B": 1, "C": 1 },
  { "_id": 3,  "B": 1, "C": 2 },
  { "_id": 5,  "B": 2, "C": 1 },
  { "_id": 6,  "B": 2, "C": 1 },
  { "_id": 7,  "B": 2, "C": 3 },
  { "_id": 8,  "B": 3, "C": 1 },
  { "_id": 9,  "B": 3, "C": 1 },
  { "_id": 10, "B": 3, "C": 1 }
]

Что я хочу знать:

Мне нравится получать все различные "B", для которых "C" не существует со значением2 или 3.

Для данных данных результат должен быть только 3, потому что для других строк "B" существуют значения "C" 2 или 3.

В SQL я бы создаллевое внешнее соединение, чтобы получить это.

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Следующий запрос должен сделать

db.getCollection('foo').distinct("B", {"C" : {$nin: [2, 3]}});
0 голосов
/ 25 сентября 2019

Я обнаружил, что этот запрос возвращает правильный результат:

db.mytest.distinct("B", {"B" : {$nin: db.mytest.distinct("B", {"C" : {$in: [2, 3]}})}});
...