获取嵌套在数组 MongoDB 中的单个对象
Get a Single Object nested in array MongoDB
我一直在尝试使用 find 或 findOne 从 MongoDB 数据库对象数组中查询单个对象。
我正在尝试使用它的 teamid 拉取一个 "clientteams" 嵌套对象。
$user['team']是属于英雄队的一串59dcf4d1fd82f416ac00608d
文档示例
{
"_id":ObjectId("5a018682a8102a27349741cc"),
"clientteams":[
{
"teamid":ObjectId("59dcf4d1fd82f416ac00608d"),
"name":"heroes"
},
{
"teamid":ObjectId("59dde7effd82f42c6000062a",
"name":"villions"
}
]
}
PHP 我一直尝试的代码 returns 完整文档。
$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")} }
]);
现在,如果您需要过滤结果,您可以在 $match
之后使用 $project
我一直在尝试使用 find 或 findOne 从 MongoDB 数据库对象数组中查询单个对象。
我正在尝试使用它的 teamid 拉取一个 "clientteams" 嵌套对象。
$user['team']是属于英雄队的一串59dcf4d1fd82f416ac00608d
文档示例
{
"_id":ObjectId("5a018682a8102a27349741cc"),
"clientteams":[
{
"teamid":ObjectId("59dcf4d1fd82f416ac00608d"),
"name":"heroes"
},
{
"teamid":ObjectId("59dde7effd82f42c6000062a",
"name":"villions"
}
]
}
PHP 我一直尝试的代码 returns 完整文档。
$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")} }
]);
现在,如果您需要过滤结果,您可以在 $match
之后使用 $project