![](/img/trans.png)
[英]How can i update document in mongo db using .net(c#) driver without using Builders?
[英]How to combine/merge multiple document to one c# object using C# mongo Db driver in .net core
我在 mongdo DB 上有三个文档,如下例所示(祖父文档、父文档和子文档)。 我希望 object 在使用 C# mondoDB 驱动程序的结果中包含类似的结果。 场景是如果孙子没有属性/值(例如 gprop2,fprop2 ),那么它将从父/祖父获取属性/值,但同时如果所有文档都具有相同的属性(例如“cprop1”) ,那么 grad 孩子将覆盖来自 parent 和 grad parent 的值。 grad child 也可以拥有自己的属性(“sprop2”),该属性应包含在最终结果中。 我通过手动检查/复制属性/值到子级得到了最终结果,但我正在寻找有效的解决方案。 有没有办法在 .NET 内核中使用 C# mongoDb 驱动器来实现它?
祖父母文件
{
"cprop1": "gval1",
"gprop2": "gval2"
"gppcrop2": "gpcval22",
"assets" : [
{
"gasset1": "gassetVal1",
"gcasset1": "gcassetVal1"
},......
]
}
父文档
{
"cprop1": "fval1",
"fprop2": "fval2",
"gppcrop2": "gpcval33",
"assets" : [
{
"passet1": "passetVal1",
"gcasset1": "gcassetVal2"
},.......
]
}
儿童文档
{
"cprop1": "sval1",
"sprop2": "sval2",
"assets" : [
{
"sasset1": "sassetVal1",
"gcasset1": "gcassetVal3"
},..........
]
}
最后结果
{
"cprop1": "sval1",
"gprop2": "gval2",
"fprop2": "fval2",
"gppcrop2": "gpcval33",
"sprop2": "sval2",
"assets": [
{
"gasset1": "gassetVal1",
"passet1": "passetVal1"
"sasset1": "sassetVal1",
"gcasset1": "gcassetVal3"
},....
]
}
您可以使用 Merge 方法执行此操作。
static void Main(string[] args)
{
BsonDocument gp = new BsonDocument("cprop1", "gval1").Add("gprop2", "gval2").Add("gppcrop2", "gpcval22");
BsonDocument parent = new BsonDocument("cprop1", "fval1").Add("fprop2", "fval2").Add("gppcrop2", "gpcval33");
BsonDocument child = new BsonDocument("cprop1", "sval1").Add("sprop2", "sval2");
child.Merge(parent);
child.Merge(gp);
Console.WriteLine(child.ToJson(new MongoDB.Bson.IO.JsonWriterSettings() { Indent = true }));
}
你得到
{
"cprop1" : "sval1",
"sprop2" : "sval2",
"fprop2" : "fval2",
"gppcrop2" : "gpcval33",
"gprop2" : "gval2"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.