首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在MongoDB中检索列表的长度

在MongoDB中检索列表的长度
EN

Stack Overflow用户
提问于 2012-12-20 02:11:21
回答 2查看 2.3K关注 0票数 3

我尝试执行一个mongo查询,获取每个文档中数组的长度,而不是检索列表的完整内容。理想情况下,这将是一个沿着以下路线的投影选项:

代码语言:javascript
运行
复制
db.log.find({},{entries:{$length: 1}})

但这是不受支持的。也许这可以通过新的聚合框架以一种优雅的方式实现?我的想法是这样的:

代码语言:javascript
运行
复制
db.log.find({},{"entries.length": 1})

它返回的结果如下:

代码语言:javascript
运行
复制
{ "_id" : ObjectId("50d2fb07e64cfa55431de693"), "entries" : [   {    },     {    },     {    },     {    },     {    },     {    },     {    },     {  },   {    },     {    },     {    },     {    },     {    },     {  },   {    },     {    },     {    },     {    } ] }

这很难看,但基本上满足了我的需要,因为我可以计算这个列表的长度,而不需要网络权重来获得完整的内容。但我不知道为什么会这样。这个查询的实际作用是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-20 03:03:36

现在,我可以用两种方法来思考:

1)使用聚合框架:

代码语言:javascript
运行
复制
db.log.aggregate([ { $unwind : "$entries" }, { $group : { _id : "$_id", entries : {$sum:1}  } }  ]);

2)或者您可以在文档中添加一个字段来保存条目计数。因此,每次将新值推入条目数组时,都必须递增计数器。更新将如下所示:

代码语言:javascript
运行
复制
db.log.update({ _id : 123 }, { $push : { entries : 'value' }, $inc : { entriesCount : 1 } })

显然,您在这里有一个权衡:聚合框架对于这个简单的操作来说太昂贵了。但是向文档添加一个字段,每次更新都应该递增计数器。

我看,计数器看起来更合理,虽然它看起来是一个变通的方法。

票数 5
EN

Stack Overflow用户

发布于 2015-12-10 08:26:34

According to the mongodb documentation:

您也可以使用$size:

代码语言:javascript
运行
复制
db.log.aggregate([{$project:{'_id':1, 'count':{$size: "$entriesCount"}}}]);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13958490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档