Asynchronous Mongoose findOne内部异步

Asynchronous Mongoose findOne内部异步,asynchronous,mongoose,Asynchronous,Mongoose,我想循环一个数组,检查对象是否存在于mongodb中,然后插入或更新 为此,我使用async.each,然后在其中调用Model.findOne。但是findOne永远不会被处决 exports.ProcessNasVirtualDevices = function ProcessNasVirtualDevicesInfo (virtualDevices, callback) { console.log("Started Virtual Devices"); var vi

我想循环一个数组,检查对象是否存在于mongodb中,然后插入或更新

为此,我使用async.each,然后在其中调用Model.findOne。但是findOne永远不会被处决

exports.ProcessNasVirtualDevices = function ProcessNasVirtualDevicesInfo     (virtualDevices, callback)
{
    console.log("Started Virtual Devices");
    var virtualDeviceIds = [];
    if (virtualDevices != null) {
        //Loop through the virtual devices

        async.each(virtualDevices, function (objVirtualDevice, cb) {
            NasVirtualDevice.findOne({ VirtualDeviceName: nasVirtualDeviceName, PhysicalDeviceName: nasPhysicalDeviceName }, function (err, virtualDevices) {
                if (err) {
                    cb("", err);
                }
                else {
                    console.log("Found Virtual Device");
                    if (virtualDevices) {
                        console.log(nasVirtualDeviceName + "  found");
                        for (virtualDeviceProps in objVirtualDevice) {
                            console.log("Properties - " + virtualDeviceProps);
                            virtualDevices[virtualDeviceProps] = objVirtualDevice[virtualDeviceProps];
                        }
                        virtualDevices.save(function (err) {
                            if (err) {
                                cb("", err);
                            }
                            console.log("NasVirtualDevice " + objVirtualDevice.VirtualDeviceName + " updated");
                            cb();
                        });
                    }
                    else {
                        var nasVirtualDevice = new NasVirtualDevice();
                        for (virtualDeviceProps in objVirtualDevice) {
                            console.log("Properties - " + virtualDeviceProps);
                            nasVirtualDevice[virtualDeviceProps] = objVirtualDevice[virtualDeviceProps];
                        }
                        nasVirtualDevice.save(function (err) {
                            if (err) {
                                cb("", err);
                            }
                            console.log("NasVirtualDevice " + objVirtualDevice.VirtualDeviceName + " added");
                            cb();
                        });
                    }
                }            
            });                
        }, function (err) {
            // if any of the file processing produced an error, err would equal that error
            if (err) {
                // One of the iterations produced an error.
                // All processing will now stop.
                console.log('A Nas Virtual Device Failed');
            } else {
                console.log('All Virtual Device completed successfully');
            }                
        });
        callback("Nas Virtual Devices Completed");            
    }        
}

可能您可以在此处使用
findOneAndUpdate
很抱歉,在查找中提到了错误的变量名“nasVirtualDeviceName”。它应该是objVirtualDevice.fieldname。修好了。