2017-04-08 39 views
-1

am使用mongoose作为我的模式设计我想检查用户集合,如果设备ID存在于am数组中,如果false将设备推入用户设备阵列如何检查是否存在于mongodb数组中,如果不是将Id推入数组

这里是马,用户模式

var mongoose = require('mongoose'); 
mongoose.Promise = require('bluebird'); 

var deviceSchema = mongoose.Schema(
{ 
    macAddress: {type: String, required: true, unique: true}, 
    createdAt: {type: Date, default: Date.now}, 
} 
) 
var Device = mongoose.model('Device', deviceSchema); 

module.exports = Device; 

这里是我的用户模式

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 


var userSchema = Schema(
{ 
    firstname: {type: String, required: true}, 
    lastname: {type: String, required: true}, 
    email: {type: String, required: true, unique: true}, 
    username: {type: String, required: true, unique: true}, 
    password: {type: String, required: true}, 
    createdAt: {type: Date, default: Date.now}, 
    devices: [{ type: Schema.Types.ObjectId, ref: 'Device1' }] 
} 
) 

var User = mongoose.model('User', userSchema); 

module.exports = User; 

,这里是我的路由器的NodeJS

router.post('/user/device/:username', function(req, res, next) { 
if(!req.body.macAddress) { 
    sendJSONresponse(res, 400, { 
     "message": "Device Mac-Address required" 
    }); 
    return; 
} 
User.findOne({ username: req.params.username }, function(err, user) { 
    if (err) { return next(err); } 
    if (!user) { return sendJSONresponse(res, 400, { 
     "message": "user not found" 
    }); 
    } 
     Device.findOne({macAddress : req.body.macAddress}, function(err, device){ 
     if(err){return next(err);} 
     if(!device){ 
      sendJSONresponse(res, 400, { 
       "message": "No device with that macaddress" 
      }); 
      return; 
     } 
     User.find({ devices: { $elemMatch: { $eq: req.body.macAddress} } }, function(err, users){ 
       if(err){return next(err);} 
       if(users){ 
        sendJSONresponse(res, 400, { 
         "message": "Device already assigned to a user" 
        }); 
        return; 
       }else{ 
        user.devices.push(device._id); 
         user.save(function(err) { 
         if(err){return next(err);} 
         sendJSONresponse(res, 200, user); 
         }); 
       } 
      }); 

    }); 
    }); 
}); 

做这一切后,当我尝试使用API​​与邮差是告诉我,服务器无法发送响应:请帮我解决我的代码

+0

你是推设备ID的设备阵列(user.devices.push(device._id)),但你想elemMatch MACADDRESS(User.find({设备:{$ elemMatch:{$ EQ:REQ .body.macAddress}}})。 –

回答

0

您正在推动设备ID的设备阵列

user.devices.push(device._id) 

,但你想elemMatch MACADDRESS

User.find({ devices: { $elemMatch: { $eq: req.body.macAddress} } }.. 

当它应该是

User.find({ devices: { $elemMatch: { $eq: device._id} } }.. 

你必须改变elemMatch PARAM到device._id以使其正确。

router.post('/user/device/:username', function(req, res, next) { 
    if(!req.body.macAddress) { 
     sendJSONresponse(res, 400, { 
      "message": "Device Mac-Address required" 
     }); 
     return; 
    } 
    User.findOne({ username: req.params.username }, function(err, user) { 
     if (err) { return next(err); } 
     if (!user) { return sendJSONresponse(res, 400, { 
      "message": "user not found" 
     }); 
     } 
     Device.findOne({macAddress : req.body.macAddress}, function(err, device){ 
      if(err){return next(err);} 
      if(!device){ 
       sendJSONresponse(res, 400, { 
        "message": "No device with that macaddress" 
       }); 
       return; 
      } 
      User.find({ devices: { $elemMatch: { $eq: device._id} } }, function(err, users){ 
       if(err){return next(err);} 
       if(users){ 
        sendJSONresponse(res, 400, { 
         "message": "Device already assigned to a user" 
        }); 
        return; 
       }else{ 
        user.devices.push(device._id); 
        user.save(function(err) { 
         if(err){return next(err);} 
         sendJSONresponse(res, 200, user); 
        }); 
       } 
      }); 

     }); 
    }); 
}); 
+0

感谢它的作品我已经看到问题出在哪里 – Emibrown

0

使用调试器逐步去通过代码一步,并看看发生了什么。如果你不知道如何调试,看看https://code.visualstudio.com/docs/editor/debugging。这是一个免费的工具。

+0

我认为它的一个逻辑错误节点请通过代码 – Emibrown

+0

你可以自己动手做一个工具看看 –