我正在尝试使用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",
}
]
}
假设我想删除 user
是 123456789
的记录(注意,此时我不知道 _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
数组被清空了。
user
,但没有添加multi
部分。 - Sonaryr{ _id: diveId }
的更新操作时,选项{ safe: true, multi:true }
如何有帮助? - chridam