解组嵌套的 JSON 对象

所述mgo.Change类型是特定于Query.Apply方法,该方法运行的MongoDB findAndModify命令并执行任何所支持的修改一次。所述的Upsert方法,在另一方面,需要将被直接提供给MGO / BSON用于编组的修改文件。无论您是通过Query.Apply(在mgo.Change字段中)还是通过Collection.Upsert或Collection.Update方法提供它们,这些修改文档都具有相同的格式。Update


因此,导致观察到的错误是因为它试图mgo.Change用作插入的普通结构(换句话说,具有键“returnnew”等的文档),这绝对不是您想要的。例如,您提供的 shell 命令相当于使用 mgo 直接翻译:


type M map[string]interface{}

err := collection.Upsert(

    M{

        "_id": "98364_2013-12-11",

        "ci":  "16326",

        "dt":  "2013-12-11",

        "zi":  "98364",

    },

    M{

        "$setOnInsert": M{"ci": "16326", "dt": "2013-12-11", "zi": "98364"},

        "$inc":         M{"test": 1},

    },

)

尽管如此,这仍然是坏的,但出于不同的原因。正如错误消息中提到的服务器,这是尝试第二次设置分片键。需要注意的是一个UPSERT操作将利用查询文档中提供的字段,以及合并这两个查询文件和修改文件创建插入的最后文件。这意味着$setOnInsert文档中的分片键字段与查询文档中的分片键字段是冗余的。


我将改进该领域的文档,以减少人们因使用mgo.Change. 抱歉,添麻烦了。


当年话下
浏览 187回答 3
3回答

一只名叫tom的猫

有没有办法解组嵌套的 bar 属性并将其直接分配给结构属性而不创建嵌套结构?不, encoding/json 不能像 encoding/xml 那样使用“>some>deep>childnode”来解决这个问题。嵌套结构是要走的路。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go