mongodb得到过滤计数

时间:2014-03-16 00:40:45

标签: mongodb aggregation-framework

我没有关于如何创建mongodb查询的扩展知识,但我想问一下如何查询集合得到这样的东西:

{
    Total: 1000,
    Filtered: 459,
    DocumentArray: []
}

当然在一个查询中这样做,所以我不需要做这样的事情:

db.collection.find();
db.collection.find().count();
db.colection.count(); 

1 个答案:

答案 0 :(得分:1)

你可以沿着这些方向做点什么:

考虑这样的文件:

{ "_id" : ObjectId("531251829df82824bdb53578"), "name" : "a", "type" : "b" }
{ "_id" : ObjectId("531251899df82824bdb53579"), "name" : "a", "type" : "c" }
{ "_id" : ObjectId("5312518e9df82824bdb5357a"), "type" : "c", "name" : "b" }

这样的聚合管道:

db.collection.aggregate([
    { "$group": { 
        "_id": null,
        "totalCount": { "$sum": 1 },
        "docs": { "$push": {
            "name": "$name",
            "type": "$type"
        }},
    }},
    { "$unwind": "$docs" },
    { "$match": { "docs.name": "a" } },
    { "$group": {
        "_id": null,
        "totalCount": { "$first": "$totalCount" },
        "filteredCount": { "$sum": 1 },
        "docs": { "$push": "$docs" }
    }}
])

但我不会推荐它。由于超过maximum BSON document size,它肯定会在任何“真正的”集合中爆炸。我怀疑它会表现得很好。但即使效用纯粹是学术性的,它就是如何做到的。

如果您需要这些信息,只需做您正在做的事情。 这样做的“正确方法”。