Найти документ, выполнив поиск в числовых индексированных массивах значения - PullRequest
0 голосов
/ 15 августа 2011

У меня есть коллекция с записями, которые выглядят так

{
   "_id":{
      "$oid":"4e3923963b123b59b73bde67"
   },
   "ident":"terrainHome",
   "columns":[
      [
         "4e3fbe57dccd1a0cc47509ab",
         "4e3fbe57dccd1a0cc47509ac"
      ],
      [

      ]
   ]
}

каждый документ может иметь два или три столбца, каждый столбец представляет собой массив блоков, которые хранятся в другой коллекции, Я хочу запрос, который будет возвращать идентификатор для документа, который содержит блок.

Я пытался

 db.things.find({ columns[0] : "4e3fbe57dccd1a0cc47509ac" }); 

но это не сработало

Я буду продолжать пытаться. :)

Ответы [ 3 ]

1 голос
/ 15 августа 2011

Вы смешиваете типы здесь (ObjectId! = String). Вы всегда должны хранить вещи как ObjectId, а не как строки, как в массиве. Вероятно, это не корень вашей проблемы, но может быть проблематичным позже.

В вашем примере вы можете сделать это:

db.things.find({ "columns.0" : "4e3fbe57dccd1a0cc47509ac" });

Как правило, массивы массивов могут быть сложными для запроса, когда они более структурированы (например, встроенные документы).

0 голосов
/ 16 августа 2011

Это работает

db.things.find({"$where":"typeof(this.columns[0]) != \"undefined\" && this.columns[0].indexOf(\"4e48ed8245333bd40d000010\") != -1"}); 

Я приму свой собственный ответ через пару дней или около того, если кто-то не может предложить более простое решение.

ТакжеВот скриншот консоли mongo из двух предложенных решений, которые не сработали (спасибо, что нашли время), а также сложное решение, которое я нашел, которое работает.На экране показаны демонстрации того, что в коллекции есть документы, две предложенные команды поиска и решение $ where javascript, показывающее, что это работает для первого элемента в массиве, второго элемента в массиве и не возвращает записей для несоответствующего идентификатора.

the first two suggestions didn't work, but thanks anyway

Я пробовал десятки вариантов предлагаемых решений, но все они приводят к пустым результатам.

0 голосов
/ 15 августа 2011

Если вас не волнует ГДЕ совпадение, попробуйте

db.things.find({'columns' : $in : ["4e3fbe57dccd1a0cc47509ac"] });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...