我有一个类似于这个的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。
答案 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();