Получить отдельный объект, вложенный в массив MongoDB

Я пытался запросить один объект с помощью find или findOne из массива объектов базы данных MongoDB.

Я пытаюсь вытащить вложенный объект «clientteams», используя его teamid.

$ user [‘team’] — это строка из 59dcf4d1fd82f416ac00608d, принадлежащая команде героев.

Пример документа

{
"_id":ObjectId("5a018682a8102a27349741cc"),
"clientteams":[
{
"teamid":ObjectId("59dcf4d1fd82f416ac00608d"),
"name":"heroes"},
{
"teamid":ObjectId("59dde7effd82f42c6000062a",
"name":"villions"}
]
}

PHP-код, который я пробовал, всегда возвращает полный документ.

$team = $collection->findOne(['clientteams.teamid' => new MongoDB\BSON\ObjectID( $user['team'] )],[ 'clientteams' => [ '$elemMatch' => [ 'teamid' => $user['team'] ]]]);

$team = $collection->findOne(['clientteams.teamid' => new MongoDB\BSON\ObjectID( $user['team'] )], ['clientteams.$' => 1]);

0

Решение

Для этого типа ситуации вам нужно использовать совокупный, я сделал тест, и это сработало, это запрос:

    YOUR_COLLECTION.aggregate([
{ $unwind: "$clientteams" },
{ $match: { "clientteams.teamid": ObjectId("59dcf4d1fd82f416ac00608d")} }
]);

Теперь, если вам нужно отфильтровать результат, вы можете использовать $ проект после $ матч

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector