我是查询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})
答案 0 :(得分:1)
尝试一下
db.getCollection('engine')
.find({"imsi": "12345", "decoded_payload": {$exists: true}, "decoded_payload.lock_status":{$exists:true}})
.sort({"decoded_payload.timestamp":-1})