Я спросил это как комментарий к другому вопросу, а также разместил вопрос о пользователе mongodb. Пока нет ответов, поэтому я прибегаю к задаче отдельного вопроса.
Если поле содержит массив, то оператор $in выбирает документы, чье поле содержит массив, содержащий хотя бы один элемент, который соответствует значению в указанном массиве (например,, и т.д.)
Я использую:
mongod --version:
db version v2.2.2, pdfile version 4.5
Thu May 30 12:19:12 git version: d1b43b61a5308c4ad0679d34b262c5af9d664267
mongo --version:
MongoDB shell version: 2.0.4
В оболочке MongoDB:
db.nested.insert({'level1': {'level2': [['item00', 'item01'], ['item10', 'item11']]}})
Здесь список запросов, которые должны работать в соответствии с документацией, и результаты, которые они производят:
Почему это не работает?
> db.nested.findOne({'level1.level2.0': 'item00'})
null
Зачем мне нужен $all?
> db.nested.findOne({'level1.level2.0': {'$all': ['item00']}})
{
"_id" : ObjectId("51a7a4c0909dfd8872f52ed7"),
"level1" : {
"level2" : [
[
"item00",
"item01"
],
[
"item10",
"item11"
]
]
}
}
Как минимум одно из следующего должно работать, правильно?
> db.nested.findOne({'level1.level2.0': {'$in': ['item00']}})
null
> db.nested.findOne({'level1.level2': {'$in': ['item00']}})
null
Любые идеи? Мы рассматриваем отказ от MongoDB, если синтаксис запроса не работает, как рекламируется.
Спасибо!