Mongodb集合的内部计数

时间:2012-08-20 16:12:36

标签: mongodb

我需要计算以下mongo文档中的内部记录(而且我必须得到所有文档的计数),

  "_id": ObjectId("503208f5b5db0135387d9249"),
   "function": "getNumberOfRecords",
   "graph": {
       "AB1": {
           "5028cbf7d7262c333a000cb0": 1,
           "5028ede7d7262c333a0011fb": 1
       },
       "AB2": {
           "5028ef9cd7262c333a001219": 1,
           "5028fb9cd7262c333a001c7f": 1,
           "5028fb9cd7262c333a001c80": 1,
           "5028fefcd7262c333a002354": 1,
           "50290d55d7262c333a0024e0": 1,
           "502918c9d7262c333a0025c3": 1,
           "502918c9d7262c333a0025c4": 1,
           "50293220d7262c333a002727": 1,
           "50293220d7262c333a002728": 1,
           "50293220d7262c333a002729": 1,
           "50293220d7262c333a00272a": 1,
           "50295a5bd7262c333a003bbc": 1
       },
       "AB3": {
           "5028ff00d7262c333a002363": 1,
           "50295a5ed7262c333a003bcb": 1
       },
       "AB4": {
           "50293fdfd7262c333a002977": 1
       }
   },
   "nameFilter": "name",
   "siteFilter": "sitename"
}    

我需要结果为,

AB1 > 2
AB2 > 12
AB3 > 2
像智者一样......

1 个答案:

答案 0 :(得分:0)

在mongodb中执行此操作的最佳方法是创建额外的计数字段并通过客户端代码更新它们。

因此,我建议遵循架构更改以满足您的需求:

{
 graphsCount: 1,
 graph: [
       {
          name: "AB1",
          count: 2,
          items: {
             "5028ff00d7262c333a002363": 1,
             "50295a5ed7262c333a003bcb": 1
         }
        }
]
}

不,您可以轻松实现所需(AB1 > 2):

db.items.find({"graph.name" : "AB1", {"$gt": {"graph.count": 2}} })

请注意,上述查询会返回所有 root 文档,这些文档在嵌套图数组中至少有一个名称为“AB1”并且数量为>的项目2。