我有两个模型,包含以下模式:
地图:
var MapSchema = mongoose.Schema({
ownerId:{
type: Schema.Types.ObjectId,
ref: 'User',
required: true
},
mapName: {
type: String
},
mapImagePath:{
type: String,
required: true
},
createdAt: { type: Date, default: Date.now },
devices: [{type: Schema.Types.ObjectId, ref: 'Device'}]
});
设备:
var DeviceSchema = mongoose.Schema({
deviceName:{
type: String,
required: true,
index: true,
unique: true
},
roomCapacity: {
type: Number
},
roomImagePath:{
type: String,
},
mapId:{
type: Schema.Types.ObjectId,
ref: 'Map',
required: true
},
coords:{
type: [Number], //[xcoord, ycoord]
required: true
},
status:{
type: String,
required: true,
default: 'Available'
},
user:{
type: String,
},
createdAt: { type: Date, default: Date.now }
});
如您所见,一张地图有很多设备。现在,当我删除地图时,我想删除属于它的所有设备。这应该很简单,因为每个地图都有一个它的设备ID数组。但我似乎无法找到一种方法从一个集合中删除多个记录。我用这个函数删除我的地图:
module.exports.deleteMap = function(mapId, callback){
Map.findOneAndRemove({_id: mapId}, callback)
};
这将返回地图,以便我可以将其设备ID作为map.devices访问。但是,我现在如何使用map.devices从设备集合中删除所有这些?我在想像device.remove(map.devices)?
答案 0 :(得分:0)
您可以先找到地图对象,然后使用_id
运算符设备数组$in
删除地图中的所有设备。下面是一些(未经测试的)示例代码。
module.exports.deleteMap = function(mapId, callback) {
Map.findOneAndRemove({_id: mapId}, function(dbErr, map) {
if(dbErr) {
return callback(dbErr);
}
Device.remove({_id: {$in: map.devices}}, function(dbErr) {
if(dbErr) {
return callback(dbErr);
}
return callback(undefined, map);
});
});
};