根据文件:
The $pull operator removes from an existing array all instances of a value or values that match a specified condition.
var array = ["bird","tiger","bird","horse"]
解决方法
所以你是正确的,因为
$pull
运算符完全符合文档所说的,因为它的参数实际上是一个“查询”,用于匹配要删除的元素.
如果您的数组内容在您显示的时候始终将元素置于“第一”位置,则$pop
运算符实际上会删除该第一个元素.
使用基本节点驱动程序:
collection.findOneAndUpdate( { "array.0": "bird" },// "array.0" is matching the value of the "first" element { "$pop": { "array": -1 } },{ "returnoriginal": false },function(err,doc) { } );
使用mongoose返回修改后的文档的参数是不同的:
MyModel.findOneAndUpdate( { "array.0": "bird" },{ "$pop": { "array": -1 } },{ "new": true },doc) { } );
但是,如果要删除的“第一个”项目的数组位置未知,则两者都没有多大用处.
对于这里的一般方法,您需要“两个”更新,一个匹配第一个项目并将其替换为唯一要删除的内容,第二个实际删除该修改后的项目.
如果应用简单更新而不是要求返回的文档,这会更简单,也可以跨文档批量完成.它还有助于使用像async.series这样的东西,以避免嵌套你的电话:
async.series( [ function(callback) { collection.update( { "array": "bird" },{ "$unset": { "array.$": "" } },{ "multi": true } callback ); },function(callback) { collection.update( { "array": null },{ "$pull": { "array": null } },{ "multi": true } callback ); } ],function(err) { // comes here when finished or on error } );
因此,使用$unset
和positional $
运算符可以将“first”项更改为null.然后使用$pull的后续查询只删除数组中的任何空条目.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。