mongodb文件说$ pushAll是Deprecated since version 2.4: Use the $push operator with $each instead.
所以我将{$ pushAll:data}的所有内容更改为{$ push:{$ each:$ data}}
这是一项无聊的工作!
我是否需要将{$ pullAll:data}替换为{$ pull:{$ each:$ data}},然后将来不需要这样做?
或者$ pullAll不会在近期弃用?
答案 0 :(得分:0)
用法实际上有点不同,因此"直接的未来"弃用似乎没有多大意义。 $each
修饰符类型统一了API,不仅适用于$push
,还适用于$addToSet
,因此有这个原因。
在其中任何一项操作中,你都不是那么多"查询"数据,但指定要插入的对象。这些可能只是标量值,也可能是要添加到数组中的完整子文档。
让我们考虑一个文档中的数组:
{ "list": [ 0, 1, 1, 3, 2, 4, 5, 5] })
除了$pullAll
之外,还有$pull
运算符实际上将查询作为参数。这意味着$pullAll
操作实际上只是简写:
db.test.update({},{ "$pull": { "list": { "$in": [ 1,2,5 ] } } })
值得注意的是"简写"此处$pullAll
的表示法仅适用于标量值,而使用$pull
的查询文档表单实际上可以删除$pullAll
无法使用的子文档表单。考虑到这一点:
{ "list": [{ "name": "fred", "age": 20 },{ "name": "barney", "age": 20 }] }
您无法使用$pullAll
删除所有"age": 20
元素,而是需要$pull
的查询形式,更不用说将整个文档指定为{{3}的参数可能不会是你想要的:
db.test.update({},{ "$pull": { "list": { "age": 20 } } })
另外值得注意的是,有些人可能已经预料到$each
,但由于我们正在查询数组的元素,因此作为"查询文档"几乎可以隐含使用。应用于数组元素。
所以关于弃用的一般回应,我不这么认为,因为用例不同而且没有必要统一"与$elemMatch
的情况一样,使用另一个运营商的行动。
如果你真的那么担心,我会说上面显示的$addToSet
表格仍然存在一段时间。