【问题标题】:MongoDB selecting key value pairs using C# driverMongoDB 使用 C# 驱动程序选择键值对
【发布时间】:2018-04-18 15:02:23
【问题描述】:

我有一个类似于此的 MongoDB 集合:

{
  _id : 1,
  key : "key1",
  value : [ "val11", "val12"]
}
{
  _id : 2,
  key : "key2",
  value : [ "val21", "val22", "val23"]
}

我想从这个集合中获取一个 MyObject 列表(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。

【问题讨论】:

    标签: c# mongodb mongodb-csharp-2.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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-02
      • 2016-11-10
      • 2016-03-13
      • 2020-03-27
      相关资源
      最近更新 更多