Группа Mongodb по искомому полю создает массив - PullRequest
0 голосов
/ 08 ноября 2018

Пример БД:

db.books.find()

[{ _id: ObjectId("b1"), author: ObjectId("a1"), name: "Fight Club" }]

db.author.find()

[{ _id: ObjectId("a1"), name: "Chuck Palahniuk" }]

Когда я пытаюсь использовать структуру агрегации и заполнять книги авторами, заполненное поле преобразуется в массив с одним элементом. Вот моя попытка:

db.books.aggregate([ 
  {$lookup: 
     { from: "authors", 
       localField: "author", 
       foreignField: "_id", 
       as: "author"
     } 
  } 
])

Это дает мне следующую структуру:

[{ 
  _id: ObjectId("b1"), 
  name: "Fight Club", 
  author: [{ _id: ObjectId("a1"), name: "Chuck Palahniuk" }] // why an array?
}, ...]

Мне нужен просто автор: {_id, name}. Я знаю, как получить это с arrayElemAt, но этот подход выглядит странно

...