Данные исключаются при использовании $ unwind в представлении MongoDB - PullRequest
0 голосов
/ 15 октября 2018

В моем бэкэнде MongoDB я определил представление Mongo, которое возвращает список сотрудников.Проблема, с которой я сталкиваюсь, заключается в том, что если я использую $lookup, за которым следует $unwind на одном из этапов агрегации, и у этого конкретного человека еще нет данных для этого свойства, то они будут исключены извозвращенные данные.Я говорю об агрегировании следующим образом:

{
    $lookup: { "from" : "departments", "localField" : "department", "foreignField" : "_id", "as" : "department" }
},

{
  $unwind: { "path" : "$department" }
}, 

Есть ли способ обойти это: где я могу использовать $lookup и $unwind здесь, но также НЕ исключая этого человека, если они этого не делаютслучайно есть какие-либо данные для этого поля?И будет ли это достигнуто здесь или на этапе $project, который я назову несколькими этапами позже (см. Код ниже)?

{
    $project: { "name" : 1.0, "department" : { "name" : "$department.name" }, "branch" : { "name" : "$branch.name" }, "addresses" : 1.0, "notes" : 1.0, "phones" : 1.0, "emails" : 1.0, "updatedAt" : 1.0 }
},

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Согласно документации MongoDB

  If you specify a path for a field that does not exist in an input document or the field 
is an empty array, $unwind, by default, ignores the input document
 and will not output documents for that input document.

   New in version 3.2: To output documents where the array field is missing, 
null or an empty array, use the option preserveNullAndEmptyArrays.

Вы можете попробовать выполнить следующий агрегированный запрос

db.collection.aggregate([
    {
      $lookup: { 
         "from" : "departments", 
         "localField" : "department", 
         "foreignField" : "_id", 
         "as" : "department" }
     },
     {
       $unwind: { 
         "path" : "$department",
         "preserveNullAndEmptyArrays": true
      }
    }])
0 голосов
/ 15 октября 2018

Вы можете использовать preserveNullAndEmptyArrays из $unwind для достижения этого:

{
  $lookup: { 
     "from" : "departments", 
     "localField" : "department", 
     "foreignField" : "_id", 
     "as" : "department" }
 },
 {
   $unwind: { 
     "path" : "$department",
     "preserveNullAndEmptyArrays": true
  }
}, 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...