可以使用PHP distinct返回MongoDB文档中的多个值吗


Can multiple values from MongoDB doc be returned using PHP distinct?

使用MongoDB和PHP驱动程序;

为了解决这个问题,我有一个简单的Mongo集合,每个文档有4行。我想在进行查询时获得不同的用户名AND id,同时使用基于公共值的where子句。

我的测试代码:

$m  = new Mongo;
$db = $m->selectDB("test");
$db->dropCollection("activities");
$collection = $db->activities;
$collection->insert(array("username" => "brady", "public" => "Y", "userId" => "1", "activity" => "blah"));
$collection->insert(array("username" => "scott", "public" => "Y", "userId" => "2", "activity" => "blah"));
$collection->insert(array("username" => "brady", "public" => "N", "userId" => "1", "activity" => "blah"));
$cursor = $db->command(array("distinct"=> "activities", "key" => "username", "query"=>array("public"=>"Y")));
var_dump($cursor['values']);

转储产生:

array(2) { [0]=> string(5) "brady" [1]=> string(5) "scott" }

我想要用户名,但我也想要userId。有人能帮我弄清楚如何在使用distinct的同时从文档中获取这两个值吗?

您不能使用distinct:http://docs.mongodb.org/manual/reference/command/distinct/它只支持单键。

但是,您可以使用聚合框架来实现这一点。将其翻译成PHP:应该很容易

db.activities.aggregate({ $match: { public: "Y" } },
    {
      $group: {
        _id: 1,
        names: { $addToSet: "$username" },
        ids: { $addToSet: "$userId" }
      }
    }
});

关于你的测试数据,我得到:

{
    "result" : [
        {
            "_id" : 1,
            "names" : [
                "scott",
                "brady"
            ],
            "ids" : [
                2,
                1
            ]
        }
    ],
    "ok" : 1
}