我使用codeigniter与mongodb库https://github.com/intekhabrizvi/Codeigniter-mongo-library
下面是我的集合"users"。我想计算用户id为57b83ae9faa76bac338b4579的badge_slug = 100_club的所有徽章。
{
"_id" : ObjectId("57b83ae9faa76bac338b4579"),
"displayname" : "test",
"email" : "test@gmail.com",
"badges" : [
{
"awarded_at" : ISODate("2015-04-21T05:52:06Z"),
"object_id" : "",
"badge_slug" : "100_club"
},
{
"awarded_at" : ISODate("2015-04-21T06:12:14Z"),
"object_id" : "",
"badge_slug" : "100_club"
},
{
"awarded_at" : ISODate("2015-04-21T07:09:55Z"),
"object_id" : "",
"badge_slug" : "reader"
}
]
}
我所做的是
$ops = array(
array(
"$project" => array(
"count" => array(
"$size" => array(
"$filter" => array(
"input" => "$badges",
"as" => "badge",
"cond" => array("$eq" => => array("$$badge.badge_slug", "100_club") )
)
)
)
)
),
array(
"$group" => array(
"_id" => null,
"total" => array( "$sum" => "$count" )
)
)
);
$this->mongo_db->aggregate("users", $ops);
对于给定的文档,结果应该是2。但是它的返回计数是针对所有用户的。我应该在哪里提供用户id条件?
您可以使用$match
在传递到下一阶段之前对文档进行过滤。