繁体   English   中英

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM