繁体   English   中英

使用2级,3级和4级数组的Mongo DB C#代码

[英]Mongo DB C# code using 2 level , 3 level and 4 level of array

我必须使用MongoDB更新C#代码。 在这里,我在下面实现了第二级更新数组(subBranchindex在通用列表对象中获取):

for (var index = 0; index < subBranchindex.Count; index++)
{
    if (subBranchindex[index]._id == new ObjectId(subBranchid))
    {
        IMongoQuery queryEdit = Query.EQ("BranchOffice.SubBranchlist._id", new ObjectId(subBranchid));
        UpdateBuilder update = Update.Set("BranchOffice.$.SubBranchlist."+ index +".Name",subBranch.SubName).
        SafeModeResult s = dc.Collection.Update(queryEdit, update, 
        UpdateFlags.None, SafeMode.True);
    }
}

在第二级数组中,我正在使用(用于循环语句)获取数组的索引值。 接下来,我可以使用数组的第3、4和5级,这意味着将分配比(对于循环语句而言)更多的数组。 因此,不需要[for loop语句],也不需要在索引中分配硬核编号。 For example: ("BranchOffice.$.SubBranchlist.0.Name",subBranch.SubName) 这里不要硬核number [index] 0或1或2。“第二”级数组有100条以上的记录。

有什么方法可以用来排列索引值? 请说明如何解决此问题。 请用示例向我解释。

根据上面的示例,我对您的架构的理解如下:

  • 顶级文档具有一个BranchOffice字段
  • BranchOffice是一组对象
  • BranchOffice中的每个对象都有一个_idSubNameSubBranchlist字段
  • SubBranchlist是一个对象数组
  • SubBranchlist中的每个对象都有一个“ Name字段

您的更新语句似乎正在将SubName字段复制到SubBranchlistSubName的同级字段)内的对象之间的每个Name字段。

使用属性路径语法通过数组选择字段(例如SubBranchlist.0.Name ),没有“通配符”索引将允许您修改数组中所有对象之间的Name字段。

需要注意的是, $位置运算符仅适用于第一个匹配的数组元素,因此您不能使用它来更新多个数组元素。 在您的情况下,由于您正在对BranchOffice数组字段使用位置运算符,因此无论如何都不是选择。

您可以发出一系列更新查询(针对SubBranchlist每个元素),也可以考虑使用$set在一个查询中修改整个SubBranchlist数组。 使用$set的缺点是您需要读写整个阵列,如果其他并发操作也向该阵列发布更新,则可能会出现问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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