获取mongodb中具有值的嵌套对象c#

时间:2018-03-26 19:56:42

标签: c# mongodb mongodb-query

我正在尝试检索存在密钥的嵌套对象,并尝试了很多不同的过滤器/构建器,但仍然无法使其正常工作。

这是我最近的情况:

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)。有什么想法吗?

1 个答案:

答案 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 } } }";