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();