MongoDB - 排除内部数组但包含它的计数

时间:2012-03-05 14:54:21

标签: arrays mongodb include count

我有一个名为devicesegments的表,其中每一行都包含一个名为devices的大型数组。由于设备阵列的大小,我被要求不在我的查询中包含列出所有devicesegment的页面,但仅包括它们的计数。这可能吗?
我以前做过的事情: 一个简单的db.devicesegments.find()

我现在在做什么: db.devicesegments.find({}, { devices : 0 })

我想要实现的目标: db.devicesegments.find({}, { devices : 0, devices.length : 1 })

类似于COUNT(devices) AS device_count

2 个答案:

答案 0 :(得分:0)

Ashkay,目前没有办法与Mongo合作。正如@rompetroll所说,你的应用程序应该在每个文档上保留一个“count”字段,并且每当你更改数组中的条目数时,都要小心地加入它。然后,当您查询文档时,排除数组:

db.collection.find({}, {devices:0})

如果您愿意运行MongoDB 2.1(这是一个开发版本),聚合框架提供了一种在查询中计算数组大小的方法:

http://www.mongodb.org/display/DOCS/Aggregation+Framework

答案 1 :(得分:0)

由于目前无法在我的表中添加新的device_count,因此我应用的临时修补程序是从数据库中获取所有数据,以及devices数组,并为每一行添加devices.length字段,然后在发送数据之前删除devices数组。