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