Я пытался запросить один объект с помощью 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]);
Для этого типа ситуации вам нужно использовать совокупный, я сделал тест, и это сработало, это запрос:
YOUR_COLLECTION.aggregate([
{ $unwind: "$clientteams" },
{ $match: { "clientteams.teamid": ObjectId("59dcf4d1fd82f416ac00608d")} }
]);
Теперь, если вам нужно отфильтровать результат, вы можете использовать $ проект после $ матч
Других решений пока нет …