Пользовательский запрос MongoDB для возврата определенных вложенных документов - PullRequest
1 голос
/ 30 июня 2019

На самом деле не используется с расширенными функциями монго, поэтому я ищу, чтобы найти правильный способ вернуть определенные поля из моей коллекции.Учитывая следующую структуру:

[
    {
        _id: 1,
        comments: [
            {
                owner: "aaa",
                feedback: { userText: 'nice', thumb: 'up'}
            },
            {
                owner: "aab",
                feedback: { userText: 'not nice', thumb: 'down'}
            }
        ]
    },
    {
        _id: 2,
        comments: [
            {
                owner: "aac",
                feedback: { userText: 'nice', thumb: 'up'}
            }
        ]
    },
    {
        _id: 3,
        comments: [
            {
                owner: "aad",
                feedback: { userText: 'not nice', thumb: 'down'}
            },
            {
                owner: "aaa",
                feedback: { userText: 'nice', thumb: 'up'}
            }
        ]
    }
]

Я пытаюсь получить все отзывы, принадлежащие владельцу с идентификатором "aaa".Вывод должен выглядеть следующим образом:

[

    {
        owner: "aaa",
        feedback: { userText: 'nice', thumb: 'up'}
    },
    {
        owner: "aaa",
        feedback: { userText: 'nice', thumb: 'up'}
    }

]

На данный момент я использовал $elemMatch в поле `comments 'с определенным идентификатором владельца.Это вернет мне все документы из коллекции, но все равно нужно будет перебрать все из них, что я не уверен, насколько быстро это произойдет, поскольку коллекция будет расти довольно быстро ..

Спасибо!

1 Ответ

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

Вы можете использовать ниже агрегации

db.collection.aggregate([
  { "$match": { "comments.owner": "aaa" }},
  { "$unwind": "$comments" },
  { "$match": { "comments.owner": "aaa" }},
  { "$replaceRoot": { "newRoot": "$comments" }}
])

выход

[
  {
    "feedback": { "thumb": "up", "userText": "nice" },
    "owner": "aaa"
  },
  {
    "feedback": { "thumb": "up", "userText": "nice" },
    "owner": "aaa"
  }
]
...