Поиск записей, где один элемент в массиве содержит атрибут - PullRequest
1 голос
/ 18 октября 2011

У меня есть коллекция, содержащая документы.Каждый документ имеет атрибут part, содержащий массив хеша (документы).Эти документы могут иметь или не иметь атрибут _encwas.

{ 
  _id : "00001",
  parts : [
    { _encwas: 1, body: "" },
    { body: "" }
  ]
},
{ 
  _id : "00002",
  parts : [
    { _encwas: 1, body: "" },
    { _encwas: 2, body: "" }
  ]
},
{ 
  _id : "00003",
  parts : [
    { body: "" },
    { body: "" }
  ]
}

Существует ли быстрый способ найти все записи, в которых хотя бы одна часть содержит атрибут _encwas?

следующий запрос работает

db.collection.find({ "parts.0._encwas" : { $exists : true } });

, но я бы хотел найти способ заменить 0 на any part.Например,

db.collection.find({ "parts.*._encwas" : { $exists : true } });

Запрос должен быть настолько эффективным, насколько это возможно (я не против, если мне нужно создать дополнительные индексы), потому что мне нужно перебрать более 1 млн записей.

1 Ответ

3 голосов
/ 19 октября 2011

Похоже, это сработало, когда я попытался использовать данные вашего теста:

db.collection.find( { "parts._encwas": { $exists : true } } )

Кроме того, вы можете найти все документы, содержащие _encwas, имеющие определенное значение, используя:

db.collection.find( { "parts._encwas": 4 } )

... где 4 - значение ...

Я считаю, что соответствующая часть документации находится здесь: Точечная запись

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...