我正在尝试从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"}]
}
]
}
请注意,只有_id
和Name
元素是固定的;其他元素由用户动态创建,其中键和值都由用户定义。
现在,我想搜索值为Type
的元素Type A
。我怎样才能从MongoDB C#驱动程序中执行此操作?
答案 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"}})