2016-08-18 55 views
0

我在(用戶1 < ---> 1 .. *機器人)之間發生了一對多關聯錯誤,我想在添加一個新文檔用戶訂閱他應該添加一個帶有(reference和nom)的新機器人,因此用戶信息應該作爲新文檔添加到用戶集合中,機器人信息應該添加爲我的mongodb數據庫中機器人集合的新集合。node.js mongodb一對多關聯錯誤

/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 
} 

和CMD結果之後我執行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

我想你並沒有在user文件中將新創建的robot's _id推到robots文件中,同時保存它。

試試這個:

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

我很高興工作:) –