所述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. 抱歉,添麻烦了。
3 回答
一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
有没有办法解组嵌套的 bar 属性并将其直接分配给结构属性而不创建嵌套结构?
不, encoding/json 不能像 encoding/xml 那样使用“>some>deep>childnode”来解决这个问题。嵌套结构是要走的路。
- 3 回答
- 0 关注
- 186 浏览
添加回答
举报
0/150
提交
取消