@cat_crash

Где ошибка в запросе $elemMatch?

Запрос вида
db.getCollection('mycollection').find({"tags.tourism":"hotel"})

возвразает то что ожидается, но если его переписать через $elemMatch - почему то возвращается пустой резульатат
db.getCollection('mycollection').find({"tags":{$elemMatch:{"tourism":"hotel"}}})

Необходимо использование именно $elemMatch т.к. в дальнейшем для поиска будут использоваться пары массива, например{"tourism":"hotel","building":"yes"}
Пример документа
{
    "_id" : ObjectId("56d37e89b10135ea7a45980f"),
    "timestamp" : "2016-02-28T22:53:42.597Z",
    "tags" : {
        "building" : "yes",
        "name" : "Amish View Inn & Suites",
        "tourism" : "hotel"
    },
    "type" : "adrpnt"
}


Версия MongoDB: 3.0.9
  • Вопрос задан
  • 418 просмотров
Решения вопроса 2
crazyzubr
@crazyzubr
Python backend-developer
Следует убрать кавычки

db.mycollection.find({tags: {$elemMatch: {tourism: "hotel"}}})


$elemMatch тут не подходит для данной структуры, потому что он работает по списку, то есть сработало когда данные были такие:

"tags" : [{
        "building" : "yes",
        "name" : "Amish View Inn & Suites",
        "tourism" : "hotel"
    }]


Но если списка не предусматривается, то для данной задачи вполне подойдет запрос такой:

db.mycollection.find({"tags.tourism":"hotel", "tags.building":"yes"})
Ответ написан
@lega
Это не массив, elemMatch не нужен, просто прописывайте полный путь ключа:
db.mycollection.find({ "tags.tourism":"hotel", "tags.building":"yes" })
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы