簡體   English   中英

node.js mongodb一對多關聯錯誤

[英]node.js mongodb one-to-many association error

我在(用戶1 <---> 1 .. * robot)之間發生一對多關聯錯誤,我想在新用戶訂閱時添加一個新文檔,他應該添加一個具有(reference和nom)的新機器人。 ,因此用戶信息應作為新文檔添加到用戶集合中,而機器人信息應作為新集合添加到我的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);

/ models / robot:

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

/routes/robots.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 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()。pretty();之后的結果是CMD

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

}

我不知道為什么用戶中的陣列機械手是空的?

我可以這樣做嗎,插入一個用戶和應該出現在該用戶的機器人列表中的機器人?

我認為您在保存文件時並未將新創建的robot's _id推送到user文檔中的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;
    });
  });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM