Mongo更新时出错:无法使用该部分来遍历元素[重复]

2024-01-04

我正在尝试使用以下结构更新我的 mongo 集合

{
    "_id" : "T6GqWsi9qSxnyGzgC",
    "spec_name" : "test",
    "version" : "test",
    "message_type" : "test",
    "message_trigger" : "test",
    "segments" : [
        {
            "segment_id" : "MSH",
            "sequences" : [
                {
                    "dataType" : "ST",
                    "optionality" : "R",
                    "name" : "Field Seperator"
                },
                {
                    "dataType" : "ST",
                    "optionality" : "R",
                    "name" : "Encoding Characters"
                },
                {
                    "dataType" : "HD",
                    "optionality" : "O",
                    "name" : "Sending Application"
                },
                {
                    "dataType" : "HD",
                    "optionality" : "O",
                    "name" : "Sending Facility"
                },
                {
                    "dataType" : "HD",
                    "optionality" : "O",
                    "name" : "Receiving Application"
                },
                {
                    "dataType" : "HD",
                    "optionality" : "O",
                    "name" : "Receiving Facility"
                },
                {
                    "dataType" : "TS",
                    "optionality" : "O",
                    "name" : "Data/Time Of Message"
                },
                {
                    "dataType" : "ST",
                    "optionality" : "O",
                    "name" : "Security"
                },
                {
                    "dataType" : "CM",
                    "optionality" : "R",
                    "name" : "Message Type"
                },
                {
                    "dataType" : "ST",
                    "optionality" : "R",
                    "name" : "Message Control ID"
                },
                {
                    "dataType" : "PT",
                    "optionality" : "R",
                    "name" : "Processing ID"
                },
                {
                    "dataType" : "NM",
                    "optionality" : "O",
                    "name" : "Sequence ID"
                },
                {
                    "dataType" : "ST",
                    "optionality" : "O",
                    "name" : "Continuation Pointer"
                },
                {
                    "dataType" : "ID",
                    "optionality" : "O",
                    "name" : "Accept Acknowledgment Type"
                },
                {
                    "dataType" : "ID",
                    "optionality" : "O",
                    "name" : "Application Acknowledgment Type"
                },
                {
                    "dataType" : "ID",
                    "optionality" : "O",
                    "name" : "Country Code"
                },
                {
                    "dataType" : "ID",
                    "optionality" : "O",
                    "name" : "Character Set"
                },
                {
                    "dataType" : "CE",
                    "optionality" : "O",
                    "name" : "Principal Language Of Message"
                }
            ]
        }
    ],
    "segment_groups" : [
        {
            "grouping_id" : 692335,
            "segments" : [
                {
                    "segment_id" : "test",
                    "group_segment_id" : 597268,
                    "sequences" : [ ]
                }
            ]
        }
    ]
}

我希望将 { value_one: "value", value_two: "value" } 附加到segment_groups内的序列数组中。我的查询如下所示:

db.messages.update({"segment_groups.segments.group_segment_id": 597268},{$push:{ "segment_groups.segments.$.sequences":{"value_one":"value", "value_two":"value"}}})

当尝试这样做时,我收到错误:

"code" : 16837,
        "errmsg" : "cannot use the part (segment_groups of segment_groups.segments.0.sequences) to traverse the element ({segment_groups: [ { grouping_id: 692335, segments: [ { segment_id: \"test\", group_segment_id: 597268, sequences: [] } ] } ]})"
    enter code here

我已经处理这个问题一天了,但没有找到任何关于如何解决或如何重组我的收藏的合理建议。我是 mongo 的新手,不知道构建时的最佳实践,因此使其成为更好的解决方案所需的任何方法都是有价值的。


您遇到的问题是您的模型有两层嵌套数组(segments_groups and segments)并且 Mongo 无法确定该数组中的哪些项目需要更新。

在 MongoDB 3.6 中,使用以下命令可以轻松修复该问题arrayFilters / 位置过滤运算符 https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/index.html。在更新路径中,您指定代表每个数组的一个特定项目的占位符,然后您必须添加匹配条件:arrayFilters帮助 MongoDB 找到您想要更新的项目。在你的情况下:

db.messages.update({"_id" : "T6GqWsi9qSxnyGzgC"}, 
    { $push: { "segment_groups.$[sg].segments.$[s].sequences": {"value_one":"value", "value_two":"value"} } }, 
    { arrayFilters: [ { "sg.grouping_id": 692335 }, { "s.group_segment_id": 597268 } ] })

So $[sg]是一个特殊的segment_group and $[s]代表一个段。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mongo更新时出错:无法使用该部分来遍历元素[重复] 的相关文章

随机推荐