MongoDB中的嵌入式符号
我不熟悉查询MongoDB,但在过滤存在某些符号的对象时遇到了困难。例如: 我的收藏MongoDB中的嵌入式符号,mongodb,nosql,Mongodb,Nosql,我不熟悉查询MongoDB,但在过滤存在某些符号的对象时遇到了困难。例如: 我的收藏引擎中有许多对象的结构如下: { "_id" : ObjectId("5c3a5efa6b0526729490cb2f"), "imsi" : "12345", "class_name" : "foo", "decoded_payload" : { "timestamp" : 1547329260, "lock_status" : "LOCKED"
引擎中有许多对象的结构如下:
{
"_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\u有效载荷
,该载荷包含lock\u状态
(lock status的类型是symbol,而不是string)。许多对象不包含这些键,因此我想过滤掉包含这些键的对象
查询运行,但返回零结果(尽管有许多对象应该返回)。我想知道是否有一个语法错误被忽略了,因为lock\u status
是symbol类型。这里可能有什么错误
我的问题是:
db.getCollection('engine').find({
$and: [
{"decoded_payload":{
$exists: true,
$elemMatch: {"lock_status":{$exists:true} }
}
},
{"imsi": "12345"}
]})
.sort({"decoded_payload.timestamp":-1})
试试这个
db.getCollection('engine')
.find({"imsi": "12345", "decoded_payload": {$exists: true}, "decoded_payload.lock_status":{$exists:true}})
.sort({"decoded_payload.timestamp":-1})
这里不需要$和
,它是隐式的。可以简化为find({“decoded\u payload.lock\u status”:{$exists:true},“imsi”:“12345”})
。试试这个。