Вставьте 2 объединенные коллекции в новую коллекцию MongoDB с javascript - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь присоединить две коллекции к новой коллекции, вставляя результат в новую коллекцию.

Код, который я использую для соединения:

db.users.aggregate(
  [{
    $lookup: {
      from: "posts",
      localField: "_id",
      foreignField: "_uid",
      as: "postsByUser"
    }
  }])

Я знаю, что это возвращает новую коллекцию / массив Теперь я могу вставить этот новый массив в новую коллекцию следующим образом:

db.postsByUsers.insert(db.users.aggregate(
  [{
    $lookup: {
      from: "posts",
      localField: "_id",
      foreignField: "_uid",
      as: "postsByUser"
    }
  }]))

Но результат, который я получаю в коллекции «postsByUsers», не такой, как я ожидал . Я получаю много дополнительных полей, например: _useReadCommands, _cursorid, _batchSize et c. Я получаю нужную мне информацию в поле _batch, но оно не такое чистое, как я ожидал, я хочу, чтобы он выглядел как массив с объектами внутри него + поле postsByUser в конце, которое предоставит мне всю информацию. Поскольку я тестирую это, пытаясь установить var usersPosts, которые равны кодированию соединения, которое я сделал, и перебирая его, и для каждого do c: db.postsByUsers.insert(usersPosts), который, кажется, ничего не делает:

usersPosts.forEach(function(doc){
  db.postsByUsers.insertOne(doc)
})

Странная вещь, что мне удалось получить результат, который я хотел, но я не знаю почему (странно), я попытался go через код, который я написал, нажав клавишу вверх на cmd, но, похоже, ничего не дает мне тот же результат ... Пожалуйста, помогите и большое спасибо за чтение!

1 Ответ

1 голос
/ 09 мая 2020

Вы можете использовать $ out этап конвейера агрегации для вывода результата конвейера агрегации в другую коллекцию

{ $out: 'postsByUsers' }

Начиная с MongoDB 4.2, вы также можете использовать $ merge , который более гибкий и может объединять результирующие документы с существующими.

...