繁体   English   中英

如何在 Z2D50972FCECD70612895456 中使用 C# mongo Db 驱动程序将多个文档组合/合并到一个 c# object

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM