如何使用mongoose从数组中删除Object

时间:2016-11-14 12:23:57

标签: arrays node.js mongodb mongoose

我试图使用mongoose从文档中的数组中删除对象。

架构如下:

var diveSchema = new Schema({
//irrelevant fields
    divers: [{
        user: { type: Schema.Types.ObjectId, ref: 'User', required: true },
        meetingLocation: { type: String, enum: ['carpool', 'onSite'], required: true },
        dives: Number,
        exercise: { type: Schema.Types.ObjectId, ref: 'Exercise' },
    }]
});

可能的条目可以是

{
    //irrelevant fields
    "divers": [
        {
            "_id": "012345678",
            "user": "123456789",
            "meetingLocation": "carpool",
            "exercise": "34567890",
        },
        {
            "_id": "012345679",
            "user": "123456780",
            "meetingLocation": "onSite",
            "exercise": "34567890",
        }
    ]
}

说我要删除user123456789的条目(注意我此时不知道_id)。

我该如何正确地做到这一点?

我尝试了以下内容:

        var diveId = "myDiveId";
        var userIdToRemove = "123456789"
        Dive.findOne({ _id: diveId }).then(function(dive) {
            dive.divers.pull({ user: userIdToRemove });
            dive.save().then(function(dive) {
                //do something smart
            });
        });

这在文件中没有变化。

我也试过

Dive.update({ _id: diveId }, { "$pull": { "divers": { "diver._id": new ObjectId(userIdToRemove) } } }, { safe: true }, function(err, obj) {
    //do something smart
});

有了这个,我得到了整个divers数组在给定的潜水中被清空。

2 个答案:

答案 0 :(得分:13)

这个怎么样?

Dive.update({ _id: diveId }, { "$pull": { "divers": { "user": userIdToRemove } }}, { safe: true, multi:true }, function(err, obj) {
    //do something smart
});

答案 1 :(得分:0)

试试这个

  

Dive.update({_id:diveId},{" $ pull":{" drivers":{" user":" 123456789&# 34;}}})