2016-02-06 3 views
2

Я хочу запросить 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, потому что два из документов имеют 0 в качестве значения вложенного документа results.

Вот моя попытка

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

, который работает на вышеуказанном наборе данных, но слишком медленно. Мои реальные данные - это 100 тыс. Документов, каждый из которых имеет 500 вложенных документов внутри results, и этот запрос занимает несколько минут. Можно ли быстрее спроектировать этот запрос?

ответ

1

Невозможно это сделать, кроме того, что вы делаете.

Вы можете изменить схему или использовать агрегации, но я не думаю, что это то, что вы хотите.

Существует пост об этом вы можете проверить здесь: mongoDB: find by embedded value