Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 使用2级、3级和4级数组的Mongo DB C#代码_C# 4.0_Mongodb_Mongodb .net Driver - Fatal编程技术网

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

C# 4.0 使用2级、3级和4级数组的Mongo DB C#代码,c#-4.0,mongodb,mongodb-.net-driver,C# 4.0,Mongodb,Mongodb .net Driver,我必须使用MongoDB更新C代码。在这里,我在下面实现了更新的第二级数组(subBranchindex是在一个通用列表对象中获取的):- for(var index=0;index /COD>来修改一个查询中的整个子分支列表< /Cord>数组。使用$set的缺点是,您需要读写整个数组,如果其他并发操作也在对数组进行更新,这可能会成为一个问题。您可能需要尝试反馈别人给您的答案,或者以后人们可能懒得提供答案。看起来您仍在解决与此相关的问题:谢谢您的帮助,但顶级文档有一个travelagent字段

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

for(var index=0;index
这里是第二级数组,我使用(for循环语句)获取数组的索引值。接下来,我可以使用数组的第三、第四和第五级,这意味着将分配多个(for循环语句)。所以不需要[for loop语句],也不需要在索引中分配硬核编号。
例如:((“BranchOffice.$.SubBranchlist.0.Name”,subBranch.SubName)
。这里没有硬核数字[索引]0或1或2。“二级”阵列中有100多条记录


有什么方法可以用来排列索引值吗?请解释如何解决这个问题。请举例说明。

基于上述示例,我对您的模式的理解如下:

  • 顶级文档有一个
    分支机构
    字段
  • BranchOffice
    是一个对象数组
  • 分支机构
    中的每个对象都有一个
    \u id
    子名称
    子分支列表
    字段
  • 子分支列表
    是一个对象数组
  • 子分支列表中的每个对象都有一个
    名称
    字段
update语句似乎正在将
子名称
字段复制到
子分支列表
(子名称的同级字段)中对象中的每个
名称
字段

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

另一个相关的注意事项是,只适用于第一个匹配的数组元素,因此不能使用它来更新多个数组元素。在您的情况下,它无论如何都不是一个选项,因为您正在为
分支函数
数组字段使用位置运算符


您可以发布一系列更新查询(对于<代码>子分支列表中的每个元素),或者考虑使用<代码> $SET> /COD>来修改一个查询中的整个<代码>子分支列表< /Cord>数组。使用

$set
的缺点是,您需要读写整个数组,如果其他并发操作也在对数组进行更新,这可能会成为一个问题。

您可能需要尝试反馈别人给您的答案,或者以后人们可能懒得提供答案。看起来您仍在解决与此相关的问题:谢谢您的帮助,但顶级文档有一个travelagent字段。下一级文档[一个数组字段中的顶级文档]有一个分支。很抱歉,我没有提到顶级文档是旅行社。在这种情况下,您的
Update.Set()
函数可能不正确;但是,我上面的观点仍然适用于您对
$
的限制以及字段路径中的数字位置。
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);
    }
}