MongoDB 使用 C# 驱动程序选择键值对
MongoDB selecting key value pairs using C# driver
我有一个 MongoDB 集合,看起来类似于:
{
_id : 1,
key : "key1",
value : [ "val11", "val12"]
}
{
_id : 2,
key : "key2",
value : [ "val21", "val22", "val23"]
}
我想从此集合中获取 MyObjects 列表(MyObject 由两个字符串属性名称和类别组成),如下所示:
[{Category: "key1", Name: "val11"}, {Category: "key1", Name:"val12"},
{Category: "key2", Name: "val21"}, {Category:"key2",Name:"val22"}, {Category: "key2", Name: "val23"}]
public class MyObject
{
public string Name{ get; set; }
public string Category { get; set; }
}
如果有人能指出正确的解决方案,最好是使用 LINQ,我将不胜感激。
您可以使用聚合框架,需要两个步骤:$unwind to transform an array to separate documents and $project重命名属性。在 C# 中,如果您不想为数据的原始形式引入额外的 class,您可以使用 BsonDocument
:
var col = mydb.GetCollection<BsonDocument>("col");
var projection = new BsonDocument() {
{ nameof(MyObject.Category), $"$key" },
{ nameof(MyObject.Name), $"$value" },
{ "_id", 0 }
};
var result = col.Aggregate().Unwind("value")
.Project<MyObject>(projection).ToList();
我有一个 MongoDB 集合,看起来类似于:
{
_id : 1,
key : "key1",
value : [ "val11", "val12"]
}
{
_id : 2,
key : "key2",
value : [ "val21", "val22", "val23"]
}
我想从此集合中获取 MyObjects 列表(MyObject 由两个字符串属性名称和类别组成),如下所示:
[{Category: "key1", Name: "val11"}, {Category: "key1", Name:"val12"},
{Category: "key2", Name: "val21"}, {Category:"key2",Name:"val22"}, {Category: "key2", Name: "val23"}]
public class MyObject
{
public string Name{ get; set; }
public string Category { get; set; }
}
如果有人能指出正确的解决方案,最好是使用 LINQ,我将不胜感激。
您可以使用聚合框架,需要两个步骤:$unwind to transform an array to separate documents and $project重命名属性。在 C# 中,如果您不想为数据的原始形式引入额外的 class,您可以使用 BsonDocument
:
var col = mydb.GetCollection<BsonDocument>("col");
var projection = new BsonDocument() {
{ nameof(MyObject.Category), $"$key" },
{ nameof(MyObject.Name), $"$value" },
{ "_id", 0 }
};
var result = col.Aggregate().Unwind("value")
.Project<MyObject>(projection).ToList();