我正在寻找从Mongodb中的数组字段中删除所有元素的正确方法(在所有文档中) - 这些看起来是等效的,建议:(或者可能是其他方式?)
db.collection.update({}, { $pull : { 'myArray': {} }}, {multi:true} )
或
db.collection.update({}, { $set : {'myArray': [] }} , {multi:true} )
答案 0 :(得分:25)
$set
变体会更快,因为$pull
必须对数组进行计算。我实际上甚至不确定它是否会起作用,因为你并没有真正删除查询中的任何元素。
答案 1 :(得分:3)
为了确保,你需要保持一个空阵列吗?因为否则,$unset
它可能会更好。
如果您必须保留一个空数组,我相信您的$pull
调用无效 - 我认为它将删除数组中的所有空元素,而不是所有元素。
答案 2 :(得分:2)
根据Mongodb的官方文件:
当与$一起使用以匹配数组元素时,$ unset将替换 匹配元素为null而不是删除匹配元素 从阵列。此行为保持数组大小和 元素位置。
$ set应该是正确的方式。