javascript - 无法从 Mongoose 数组中删除元素

标签 javascript node.js mongodb mongoose

我正在尝试通过其 _id 从 Mongoose 的数组模型中删除元素。同样的技术在我的代码中的其他地方也有效,但在这里它无法删除该元素。经过几个小时的尝试更改其各个部分后,我终于将其发布在这里,因为也许我 sleep 不足是主要原因。有人可以找出我做错了什么吗?

ABC.findOne({
    'user': new ObjectId(req.decoded._id),
    'activity.ride': new ObjectId(id)
}, {
    'activity.$': 1
}, function(err, doc) {

    if (doc !== null) {
        for (var j = 0; j < doc.activity.length; j++) {
            var request = JSON.parse(JSON.stringify(doc.activity[j]));
            doc.activity.remove(request._id);
            doc.save();
        }
    }
});

这是模型:

var activityItem = mongoose.Schema({
    timestampValue: Number,
    xabc: String,
    full: Boolean,
    comp: Boolean
});

var ABC = mongoose.Schema({
    activity: [activityItem],
    user: {
        type: mongoose.Schema.ObjectId,
        ref: 'User'
    },
    username: String
});

最佳答案

$pull运算符从现有数组中删除与指定条件匹配的一个或多个值的所有实例。并通过 findOneAndUpdate 从数组中删除元素

ABC.findOneAndUpdate({'user': new ObjectId(req.decoded._id)},
                    {$pull: {activity: {_id: request._id}}},
                    {new: true},
                    function(err, a) {
                        if (err)
                            console.log(err);
                        else
                            console.log(a);
                    });

顺便说一句,我在 activityItem 架构中没有找到 ride,因此我从查询条件中删除了 ride

关于javascript - 无法从 Mongoose 数组中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35565415/

相关文章:

php - 如何在 PHP 和 MongoDB 中使用 updateMany 查询

javascript - event.preventDefault();停止在FF工作

javascript - 在node.js服务器中使用https同步读取文件

javascript - 当存在多个标签时获取标签之间的字符串

javascript - Webpack 2 : How do I generate a bundle. js 来自 Bootstrap 预制模板?

node.js - 如何使 Instagram OAuth(或任何 OAuth)始终强制用户登录,即使他们已登录应用程序的网站?

node.js - Loopback 4 POST 方法给出 422 错误

javascript - 将多个对象作为 1d 传递到数组中

javascript - 为什么我的 jest.mock 中的 Promisereject() 会转到 then() 而不是 catch()?

MongoDB - 转换数组字段以设置