MongoDb:$ push/$ addtoset之间的差异

Emi*_*pez 65 mongodb

我阅读了MongoDb中的文档,我使用了一个简单的证明,我只看到:Push正在对数组进行排序,但addtoSet不是.

对我来说视觉上是一样的,我不知道其中的区别.

有人可以解释我的区别吗?

另一个人认为,如果它可能是西班牙语或简单的英语,我会贬低它.

cub*_*buk 113

$addToSet如果项已经包含它,则不将该项添加到给定字段,另一方面,$push将该给定对象添加到字段中是否存在.

{_id: "docId", items: [1, 2]}
db.items.update({_id:"docId"}, {$addToSet:{items: 2}}); // This won't update the document as it already contains 2
db.items.update({_id:"docId"}, {$push: {item:2}}); // this will update the document. new document {_id: "docId", items:[1,2,2]}
Run Code Online (Sandbox Code Playgroud)


小智 19

$ push - 按照收到的顺序添加项目.您也可以多次添加相同的项目

$ addToSet - 只添加唯一的项目,但项目的顺序不受保证

如果您需要添加订购的唯一商品,您可以通过$ addToSet分组和添加元素,然后使用元素$ unwind数组,按项目排序$ sort,然后使用$ push项目再次$ group.