2016-08-18 6 views
0

У меня есть ошибка связи «один-ко-многим» между (user 1 < ---> 1 .. * robot), я хочу добавить новый документ, когда новый пользователь должен подписаться, он должен добавить нового робота с (ссылкой и номером), поэтому пользовательская информация должна быть добавлена ​​в коллекцию пользователя в качестве нового документа, а информация о роботе должна быть добавлена ​​как новая коллекция в коллекции роботов в моей базе данных mongodb.Узел связи node.js mongodb one-to-many

/routes/users.js:

router.post('/register', function(req, res, next) { 
//tester si username exist 
var user = new models.user({ 
nom_prenom: req.body.nom_prenom, 
username: req.body.username, 
password: req.body.password, 
email: req.body.email, 
sexe: req.body.sexe, 
adresse: req.body.adresse, 

admin: false 
}); 
var robot = new models.robot({ 
reference: req.body.reference, 
nom: req.body.nom, 
flag: req.body.flag   
}); 
user.save(function(err, u){ 
if(err) res.json(err); 
res.json(u); 
    }) 
robot.save(function(err, u){ 
if(err) res.json(err); 
res.json(u); 
    }) 
    }); 

/models/users.js:

var mongoose = require('../config/db'); 

var UserSchema = mongoose.Schema({ 

    nom_prenom: String, 
    password: String, 
    username: String, 
    email: String, 
    //username: { String, unique:true, required:true }, 
    //email: { String, unique:true, required:true }, 
    date_naissance: Date, 
    adresse: String, 
    sexe: String, 
    equipements:[{type: mongoose.Schema.Types.ObjectId, ref: 'Equipement'}], 
    robots:[{type: mongoose.Schema.Types.ObjectId, ref: 'Robot'}], 

    admin: Boolean 
    }); 

    module.exports = mongoose.model('User', UserSchema); 

/модели/робот:

var mongoose = require('../config/db'); 

    var RobotSchema = mongoose.Schema({ 
    reference: String, 
    nom: String, 
    flag: Boolean, 
    user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' } 
    }); 

    module.exports = mongoose.model('Robot', RobotSchema); 

/маршруты/роботы .js:

router.get('/', function(req, res, next){ 
    models.robot.aggregate([ 
    { 
     "$group": { 
      "_id": "$user_id", 
      "robots": { "$push": "$$ROOT" } 
     } 
    } 
    ]).exec(function(err, results){ 
    if (err) res.json({error: err}); 
    models.user.populate(results, { "path": "_id" }, function(err, result) { 
     if(err) res.json({error: err}); 
     console.log(result); 
     res.json(result); 
    }); 
    }); 
    }); 

результат Почтальон:.

the robot array is empty

The Result on CMD after i execute :db.robots.find().pretty(); 

{ 
    "_id" : ObjectId("57b5862673c11c840b31cc55"), 
    "reference" : "Rob9999", 
    "nom" : "Robot 9999", 
    "flag" : false, 
    "__v" : 0 
} 

и результат на ЦМД после того, как выполнить db.users.find() довольно();

{ 
    "_id" : ObjectId("57b5862673c11c840b31cc54"), 
    "nom_prenom" : "test", 
    "username" : "test", 
    "password" : "test", 
    "email" : "[email protected]", 
    "sexe" : "femme", 
    "adresse" : "tunis", 
    "admin" : false, 
    "robots" : [ ], 
    "equipements" : [ ], 
    "__v" : 0 

}

Я не нахожу, почему роботы массива в пользователе пуст ??

Могу ли я вставить пользователя и робота, который должен появиться в списке роботов этого пользователя?

+0

, когда и как ваш 'маршрут/robots.js' называется? –

ответ

0

Я думаю, что вы не нажимали вновь созданный robot's _id на массив robots в user документ, сохраняя его.

Попробуйте:

router.post('/register', function(req, res, next) { 
//tester si username exist 
var user = new models.user({ 
nom_prenom: req.body.nom_prenom, 
username: req.body.username, 
password: req.body.password, 
email: req.body.email, 
sexe: req.body.sexe, 
adresse: req.body.adresse, 

admin: false 
}); 
var robot = new models.robot({ 
reference: req.body.reference, 
nom: req.body.nom, 
flag: req.body.flag   
}); 

// dont change the header(res.json(u)) multiple times, make sure you set the header 
// single time only. otherwise you may get unnecessary errors. 

robot.save(function(err, u){ 
    if(err) res.json(err); 
    //save user only after robot is successfully saved and push its id into robots array. 
    user.robots.push(u._id); 
    user.save(function(err, user){ 
     if(err) res.json(err); 
     res.json(user); 
     return; 
    }); 
    }); 
}); 
+0

Спасибо, рави за вашу помощь. Это прекрасно работает. –

+0

Я рад, что сработал :) –