Несколько соединений MongoDB с вложенными документами - PullRequest
0 голосов
/ 26 мая 2020

У меня две коллекции,

Коллекция пользователей:

{
    "userId": 1,
    "name": 'John',
    "profile": 'john.png'
},
{
    "userId": 2,
    "name": 'Doe',
    "profile": 'doe.png'
},
{
    "userId": 3,
    "name": 'John Doe',
    "profile": 'johndoe.png'
}

Коллекция сообщений:

{
    "postId": 1,
    "userId": 1,
    "postContent": "Lorem Ipsum is simply dummy text of the printing and typesetting industry.",
    "comments": [
        {
            "comment": "sample comment",
            "commentedBy": 2,
        },
        {
            "comment": "Another sample comment",
            "commentedBy": 3,
        }
    ],
}

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

Ответы [ 2 ]

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

вы можете использовать метод «заполнить», предоставляемый Mon goose: https://mongoosejs.com/docs/populate.html

Он позволяет вам «связывать» ваши коллекции в определении схемы, и запросить и заполнить все связанные коллекции одним запросом, например:

Posts.findOne({ postId: 1 }).populate('user')

Перейдите по ссылке на документацию выше, чтобы получить дополнительные сведения о том, как писать свои схемы.

0 голосов
/ 26 мая 2020

Вы можете использовать $aggregate и $lookup для выполнения таких

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

Это будет напечатано как показано ниже

{
        "_id" : ObjectId("5ecceb468d4390391825b79d"),
        "postId" : 1,
        "userId" : 1,
        "postContent" : "Lorem Ipsum is simply dummy text of the printing and typesetting industry.",
        "comments" : [
                {
                        "comment" : "sample comment",
                        "commentedBy" : 2
                },
                {
                        "comment" : "Another sample comment",
                        "commentedBy" : 3
                }
        ],
        "users" : [
                {
                        "_id" : ObjectId("5ecceb168d4390391825b79a"),
                        "userId" : 1,
                        "name" : "John",
                        "profile" : "john.png"
                }
        ]
}

Ссылка из MongoDB

https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...