Специальный запрос MongoDB - PullRequest
       0

Специальный запрос MongoDB

0 голосов
/ 07 апреля 2020

В моей базе данных MongoDB у меня есть массив (parent_archive_uids) для каждой записи, который содержит один или несколько UIDS. В качестве ответа на мой запрос я хочу получить отдельную запись для каждого элемента в этом массиве вместе с другой строкой (filename.value).

В настоящее время у меня есть следующий запрос:

db.files.aggregate( [ 
{ $match: {'filename.value': {'$exists': true, '$not': {'$size': 0}}}},
{ $group: {'_id': '$parent_archive_uids', 'Filename': {'$push': '$filename.value'},}},
] )

Это дает мне следующий результат:

{
    "_id" : [ 
        "4e1dd3d462764bc067cf398e70cfa16a653f39badbc5687fa61b6108bf0f3679_27288071", 
        "bfa178455b9bba5e748897d41f183d3837a51243d0364374c1fa8eea376cab27_27288067"
    ],
    "Filename" : [ 
        "File1"
    ]
}

Но я хотел бы получить отдельную запись для каждого элемента в массиве, например:

{
    "_id" : [ 
        "4e1dd3d462764bc067cf398e70cfa16a653f39badbc5687fa61b6108bf0f3679_27288071"
    ],
    "Filename" : [ 
        "File1"
    ]
}
{
    "_id" : [ 
        "bfa178455b9bba5e748897d41f183d3837a51243d0364374c1fa8eea376cab27_27288067"
    ],
    "Filename" : [ 
        "File1"
    ]
}

Возможно ли это с MongoDB запрос? Я пытался, но потерпел неудачу.

1 Ответ

1 голос
/ 07 апреля 2020

Вам не нужен ваш $group этап. Как правило, $group может создавать массивы, а $unwind избавляется от них.

Вы можете добавить этап размотка после $match:

{ $unwind: "$parent_archive_uids" }

Это создаст документ для каждой записи в массиве parent_archive_uids, который содержит все остальные поля в документе, из которого он получен. Если вы также хотите переименовать поля в нужные выходные имена, вы можете сделать это с помощью $ unset и $ project

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