Как вы выбираете только документы MongoDB, которые имеют подполе, используя структуру агрегирования? - PullRequest
0 голосов
/ 27 июня 2019

Как отфильтровать документы из коллекции монго, у которых нет подполя, при использовании агрегации?

Коллекция выглядит так:

{ 
  "_id": ObjectId("adasdasd"),
  "obj": { "a": 1 }
},

{ 
  "_id": ObjectId("ergergerg"),
  "obj": { "b": 2 }
},

{ 
  "_id": ObjectId("adasdasd"),
  "obj": { "a": 3, "b": 4 }
},

Как бы я использовал функцию aggregate () только для выбора документов, в которых поле "obj" содержит подполе "b"? Результат должен выглядеть так:

{ 
  "_id": ObjectId("ergergerg"),
  "obj": { "b": 2 }
},

{ 
  "_id": ObjectId("adasdasd"),
  "obj": { "a": 3, "b": 4 }
},

Я понимаю, что могу использовать find () и $ существующие, но я ищу решение с использованием aggregate (). Любая помощь очень ценится.

1 Ответ

1 голос
/ 27 июня 2019

От макушки головы:

$match: {'obj.b': { $exists: true, $ne: null } }

Взгляните на стадию матча $ :

Фильтрация документов для пропуска толькодокументы, которые соответствуют указанным условиям для следующего этапа конвейера.

Этап $ match имеет следующую форму прототипа:

{$ match: {}}

И оператор $ существует :

$ существует Синтаксис: {field: {$ exist:}}

Когда true, $ существующие совпадениядокументы, содержащие поле, включая документы, в которых значение поля равно нулю.Если значение равно false, запрос возвращает только те документы, которые не содержат этого поля.

Схожий вопрос: Как запросить "не является нулевым" в Mongo?

...