Mongodb php:统计子文档中字段的个数


mongodb php: count the number of field in a subdocument

我使用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在传递到下一阶段之前对文档进行过滤。