[英]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
中的每个对象都有一个_id
, SubName
和SubBranchlist
字段 SubBranchlist
是一个对象数组 SubBranchlist
中的每个对象都有一个“ Name
字段 您的更新语句似乎正在将SubName
字段复制到SubBranchlist
( SubName
的同级字段)内的对象之间的每个Name
字段。
使用属性路径语法通过数组选择字段(例如SubBranchlist.0.Name
),没有“通配符”索引将允许您修改数组中所有对象之间的Name
字段。
需要注意的是, $位置运算符仅适用于第一个匹配的数组元素,因此您不能使用它来更新多个数组元素。 在您的情况下,由于您正在对BranchOffice
数组字段使用位置运算符,因此无论如何都不是选择。
您可以发出一系列更新查询(针对SubBranchlist
每个元素),也可以考虑使用$set
在一个查询中修改整个SubBranchlist
数组。 使用$set
的缺点是您需要读写整个阵列,如果其他并发操作也向该阵列发布更新,则可能会出现问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.