2012-03-05 84 views
2

我有一个名为devicesegments的表,其中每行包含一个名为devices的大型数组。由于设备阵列的大小,我被要求不要在我的查询中包含一个列出所有devicesegment s的页面,但只包括它们的数量。这可能吗?
什么以前我一直做: 一个简单的db.devicesegments.find()MongoDB - 排除内部数组,但包括它的数量

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

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

就像一个COUNT(devices) AS device_count

回答

0

阿什凯,目前没有办法与Mongo做到这一点。正如@rompetroll所说,您的应用程序应该在每个文档上保留一个“count”字段,并且每当您更改数组中的条目数时,都会小心地增加$ count。然后,当你查询的文档,排除像数组:

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

如果你愿意执行MongoDB 2.1,这是一个开发版本,聚合框架提供了一个查询中计算数组大小的手段:

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

0

由于没有办法目前做到这一点,在不包括在我的表一个新device_count,我申请了临时的解决办法是从数据库中获取的所有数据,与devices阵列沿,并为每一行添加一个字段devices.length,然后在发送数据之前删除devices阵列。