$addToSet $each 操作,当数组中有中文时,会插入重复数据,这个是为什么?

2015-05-19 17:31:43 +08:00
 guguai
http://suchj.iteye.com/blog/1491023
今天也遇到这个问题了,上网搜了搜也没有找到解决方法,所以到这里问问。
3992 次点击
所在节点    MongoDB
1 条回复
karloku
2015-05-19 18:28:04 +08:00
> db.testbed.update({"_id":ObjectId("555b0d58806a1600d242c861")}, {$set: {"name" : []}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.testbed.find(ObjectId("555b0d58806a1600d242c861"));
{ "_id" : ObjectId("555b0d58806a1600d242c861"), "name" : [ ] }
> db.testbed.update({"_id": ObjectId("555b0d58806a1600d242c861")}, {$addToSet: {"name" : {$each : [ "他", "他", "他", 1, 2, 3, "me", "me"]}}}, true)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.testbed.find(ObjectId("555b0d58806a1600d242c861"));
{ "_id" : ObjectId("555b0d58806a1600d242c861"), "name" : [ "他", 1, 2, 3, "me" ] }
> db.testbed.update({"_id": ObjectId("555b0d58806a1600d242c861")}, {$addToSet: {"name2" : {$each : [ "他", "他", "他", 1, 2, 3, "me", "me"]}}}, true)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.testbed.find(ObjectId("555b0d58806a1600d242c861"));
{ "_id" : ObjectId("555b0d58806a1600d242c861"), "name" : [ "他", 1, 2, 3, "me" ], "name2" : [ "他", 1, 2, 3, "me" ] }

tested mongodb-3.0.3


可能是以前版本的bug. 印象里以前还有过$addToSet w/ $each到一个事先不存在的field时会出现重复.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/192260

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX