使用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
}