从集合中删除多个记录 - MongoDB

时间:2016-07-16 13:55:08

标签: node.js mongodb mongoose

我有两个模型,包含以下模式:

地图:

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)?

1 个答案:

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