40

我正在寻找从 Mongodb 中的数组字段(跨所有文档)中删除所有元素的正确方法-这些似乎是等效的,建议这样做:(或者可能是其他方式?)

db.collection.update({}, { $pull : { 'myArray': {} }}, {multi:true} )

或者

db.collection.update({}, { $set : {'myArray': [] }} , {multi:true} )
4

3 回答 3

37

$set变体将更快,因为$pull必须对数组进行计算。实际上,我什至不确定它是否会起作用,因为您并没有真正删除查询中的任何元素。

于 2013-07-25T14:03:07.013 回答
6

只是为了确保,您是否需要保留一个空数组?因为否则,它可能会更好$unset

如果您必须保留一个空数组,我相信您的$pull调用将不起作用 - 我认为它会从您的数组中删除所有空元素,而不是所有元素。

于 2013-07-25T14:07:46.607 回答
4

根据MongoDB的官方文档:

当与 $ 一起使用以匹配数组元素时,$unset 将匹配元素替换为 null,而不是从数组中删除匹配元素。此行为使数组大小和元素位置保持一致。

$set 应该是正确的方法。

于 2015-01-10T03:35:26.497 回答