微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

node.js – 如何在MongoDB中拉出数组中项的一个实例?

根据文件

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   
    }
);

因此,使用$unsetpositional $运算符可以将“first”项更改为null.然后使用$pull的后续查询删除数组中的任何空条目.

这就是你如何安全地从数组中删除值的“第一次”出现.要确定该数组是否包含多个相同的值,这是另一个问题.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐