我一直在尝试使用MongoDB Database对象数组中的find或findOne查询单个对象。
我试图使用它的teamid来拉出“clientteams”嵌套对象。
$ 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 :(得分:0)
对于这种情况类型,您需要使用聚合,我确实做了测试并且它有效,这是一个查询:
YOUR_COLLECTION.aggregate([
{ $unwind: "$clientteams" },
{ $match: { "clientteams.teamid": ObjectId("59dcf4d1fd82f416ac00608d")} }
]);
现在,如果您需要过滤结果,可以在 $ match 之后使用 $ project