按值更快地查询

时间:2016-02-06 07:21:17

标签: performance mongodb

我想查询MongoDB,在results顶级文档中找到它有多少嵌套文档的值0

例如,在此集合中:

{name: "mary", results: {"foo" : 0, "bar" : 8}}
{name: "bob", results: {"baz" : 9, "qux" : 0}}
{name: "leia", results: {"foo" : 9, "norf" : 5}}

我的查询应返回2,因为其中两个文档的0results的嵌套文档的值。

这是我的尝试

db.collection.find({$where : function() { 
    for (var key in this.results) {
          if (this.results[key] === 0) { return true;} } return false; } }) 

适用于上述数据集,但速度太慢。我的真实数据是100k文档,每个文档在results内有500个嵌套文档,上面的查询需要几分钟。是否可以更快地设计此查询?

1 个答案:

答案 0 :(得分:1)

除了你正在做的事情之外,别无他法。

您只能更改架构或使用聚合,但我认为这不是您想要的。

有一篇关于它的帖子,你可以在这里查看: mongoDB: find by embedded value