从C#中查找MongoDB文档中的特定元素

时间:2014-11-19 12:27:44

标签: c# mongodb mongodb-.net-driver

我正在尝试从C#ASP.NET应用程序访问MongoDB。

我们假设,我有一个类似下面的文件 -

{
    "_id" : ObjectId("546c776b3e23f5f2ebdd3b03"),
    "Name" : "Test",
    "Values" : [ 
        {
            "Name" : "One",
            "Value" : 1
        }, 
        {
            "Name" : "Two",
            "Value" : 2,
            "Parameters": [{"Type": "Type A"}, {"Type": "Type B"}]
        }
    ]
}

请注意,只有_idName元素是固定的;其他元素由用户动态创建,其中键和值都由用户定义。

现在,我想搜索值为Type的元素Type A。我怎样才能从MongoDB C#驱动程序中执行此操作?

2 个答案:

答案 0 :(得分:1)

您可以使用此代码:

var query = Query.EQ("Values.Parameters.Type", "Type A");
var items = collection.Find(query).ToList();

如果数据有结构,请使用:

var items = collection.FindAs<Item>(query).ToList();

修改 对于动态搜索,我想到的唯一方法是全文搜索:

第1步:通过db.test.ensureIndex({"$**" : "text"});

在所有字段中定义全文搜索

第2步:搜索您的查询db.test.find( { $text: { $search: "Type A" } } )

如果是你的答案,那么C#代码应该很简单。

答案 1 :(得分:0)

以下聚合查询可能会解决您的问题,但我不知道如何在C#中编写

db.collectioName.aggregate({"$unwind":"$Values"},
         {"$unwind":"$Values.Parameters"},
        {"$match":{"Values.Parameters.Type":"Type A"}},
       {"$group":{"_id":"$Values"}})