![](/img/trans.png)
[英]How to get a object value nested inside document in a collection in MongoDB PHP
[英]MongoDB + PHP : Get subarray inside a document
我具有以下结构和数据:
game{
alias: "GAME01",
players[
{
name: Nick,
city: London
},
{
name: Chris,
city: London
},
{
name: Emmy,
city: Paris
}
]
}
我需要和伦敦的球员们一起排练。 就像是:
[[name: Nick, city: London], [name: Chris, city: London]]
我怎么才能得到它? 有任何想法吗?
我尝试过的所有内容都会让我整个游戏或一个空对象。
mongoDB版本:3.4.4 / mongoDB驱动程序版本1.6.14
谢谢!
我尝试过的
尝试1:
$game = $mongo->game->find(
array("alias" => "GAME01", "players.city" => "London"),
array('_id' => false, "players" => array('$elementMatch' =>
array("players.city" => "London")))
);
返回:
object(MongoCursor)#10 (0) {}
尝试2:
$game = $mongo->game->find(
array("alias" => "GAME01",
array("players" => array('$elementMatch' => array("city" => "London"))))
);
返回:
object(MongoCursor)#10 (0) {}
尝试3:
$ops = array(
array('$match' => array("alias" => "GAME01")),
array('$project' => array("game.players" => 1)),
array('$unwind' => '$players'),
array('$match' => array("players.city" => "London")),
array('$group' => array(
'_id' => '$_id',
'players' => array(
'$push' => '$players'))
)
);
$game = $mongo->game->aggregate($ops);
返回:
array(2) {
["result"] => array(0) {}
["ok"] => float(1)
}
谢谢! 我终于找到了这个解决方案:
$ops = array(
array('$match' => array(
"alias" => "GAME01",
)
),
array('$project' => array(
"players" => 1
)
),
array('$unwind' => '$players'),
array('$match' => array(
"athletes.city" => "London"
)
),
array('$group' => array(
'_id' => '$_id',
'players' => array(
'$push' => '$players'
)
)
)
);
$game = $mongo->game->aggregate($ops);
$players = $game["result"][0]["players"];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.