Я новичок в запросах MongoDB, но столкнулся с трудностями при фильтрации объектов, в которых существуют определенные символы.Например:
У меня есть число объектов в моей коллекции engine
, которые структурированы следующим образом:
{
"_id" : ObjectId("5c3a5efa6b0526729490cb2f"),
"imsi" : "12345",
"class_name" : "foo",
"decoded_payload" : {
"timestamp" : 1547329260,
"lock_status" : "LOCKED"
},
"direction" : "in",
"created_at" : ISODate("2019-01-12T21:41:14.998Z")
}
Моя цель - получить объекты, чья imsi
равна 12345, которые содержатdecoded_payload
, который содержит lock_status
(состояние блокировки имеет тип символ , а не строка).Многие объекты не содержат эти ключи, поэтому я хочу отфильтровать те, которые имеют.
Запрос выполняется, но возвращает ноль результатов (хотя есть много объектов, которые должны быть возвращены).Мне интересно, если есть синтаксическая ошибка, которая упускается из виду, потому что lock_status
имеет тип символа.В чем здесь может быть ошибка?
Мой запрос:
db.getCollection('engine').find({
$and: [
{"decoded_payload":{
$exists: true,
$elemMatch: {"lock_status":{$exists:true} }
}
},
{"imsi": "12345"}
]})
.sort({"decoded_payload.timestamp":-1})