我正在尝试检索存在密钥的嵌套对象,并尝试了很多不同的过滤器/构建器,但仍然无法使其正常工作。
这是我最近的情况:
var filter = "{ Properties : { " + propName + ": { $exists: true } } }";
var results = coll.Find(filter).ToList();
其中propName是一个字符串变量。
db内容如下所示:
{
"_id" : ObjectId("5aaa1e72884cd35eef175c6a"),
"Hash" : 1164917297,
"Name" : "N3N_ZN1",
"Description" : null,
"Label" : "N3N_ZN1",
"RelationSource" : {
"From" : [],
"To" : [],
"Pair" : []
},
"Relations" : {},
"Properties" : {
"SOPName" : [
"SOP for Intrusion"
]
},
"ObjectTypeName" : "ultrasonic",
"PlayerTypeName" : null,
"PlayerProperties" : null
}
我的目标是检索存在SOPName的所有文档。 Properties对象是动态的,因此SOPName键可能不存在于所有文档中。
哦,我上面的查询不是检索我的数据库中的任何文件(计数0)。有什么想法吗?
答案 0 :(得分:0)
好的,使用以下方法解决了这个问题:
var coll = DatabaseCommon.Instance.GetDatabase("ps_" + siteId).GetCollection<BsonDocument>("Object");
var filter = "{ 'Properties." + propName + "' : { '$exists': true } }";
var results = coll.Find(filter).ToList();
过滤器不能作为典型的嵌套对象...这个失败:
var filter = "{ Properties : { " + propName + " : { '$exists': true } } }";