MongoDB使用C#驱动程序选择键值对

时间:2018-04-18 15:02:23

标签: c# mongodb mongodb-csharp-2.0

我有一个类似于这个的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。

1 个答案:

答案 0 :(得分:1)

您可以使用聚合框架,您需要两个步骤:$unwind将数组转换为单独的文档,$project转换为重命名属性。在C#中如果您不想为原始数据形式引入其他类,可以使用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();