2017-08-16 57 views
0

我有兩種類型的實體,usersfamilies,家庭和用戶之間有多對一的關係,所以一個家庭可以有很多用戶,但一個用戶只有一個家庭。我試圖創建一個試圖實現這種關係的Mongo模式,但不確定這是否是正確的方式。如何將父架構的ObjectId關聯到同一事務中的子架構?

我在我的HTML頁面上有一個按鈕,點擊後會生成一個家庭代碼,併爲家庭實體創建一個新的家庭屬性。但是,我無法將新生成的family.ObjectId連接到用戶實體中用戶的familyid屬性。

任何想法我做錯了什麼?

我的模型:

系列型號:

var mongoose = require("mongoose"); 
var shortid = require('shortid'); 
//Set Schema 
var familySchema = mongoose.Schema({ 
    individuals: [{ 
      type: mongoose.Schema.Types.ObjectId, 
      ref: "User" 
     }], 
    familyCode: { 
      type: String, 
      'default': shortid.generate 
    } 
}); 

//setup and export the model 
module.exports = mongoose.model("Family", familySchema); 

用戶型號:

var mongoose = require("mongoose"); 
var passportLocalMongoose = require("passport-local-mongoose"); 

var UserSchema = new mongoose.Schema({ 
    username: String, 
    password: String, 
    image:  String, 
    firstName: String, 
    lastName: String, 
    accountid: String, 
    isAdmin: {type: Boolean, default: false}, 
    userlabel: String, 
    familyid: 
     { type : mongoose.Schema.Types.ObjectId, 
      ref: "Family"} 
     }); 

UserSchema.plugin(passportLocalMongoose); 
module.exports = mongoose.model("User", UserSchema); 

我的路線:

router.post("/familySetup", function(req, res){ 
    if(!req.body.familyid){ 
     var familyCode = shortid.generate(); 
     console.log(familyCode); 
     // var individuals = {id:req.user._id} 
     var newFamily = {familyCode:familyCode}; 

     Family.create(newFamily, function(err, newFamily){ 
      if(err){ 
       req.flash("error", "something seems to have gone amiss. Please try again.") 
       console.log(err); 
       res.redirect("home") 
      }else{ 
       var updatedUser = {familyid:newFamily._id} 
       console.log(updatedUser); 
       User.findByIdAndUpdate(req.params.user_id, updatedUser, function(req, res){ 
        if(err){ 
         console.log(err); 
        }else{ 
          //redirect to index 
         res.redirect("/familySetup");      
        } 
       }); 
      } 
     }); 
    }else{ 
     alert("You already have a family account"); 
     res.redirect("back"); 
    } 
}); 

基於錯誤我得到的,我可以創造一個familyCode和我能夠創建變量,updatedUser。但它不會使用新屬性更新用戶。這是錯誤,當我運行代碼:

ByJyRqb_Z 
{ familyid: 59941dd6589f9a1c14a36550 } 
events.js:141 
     throw er; // Unhandled 'error' event 
    ^

TypeError: Cannot read property 'redirect' of null 
    at /home/ubuntu/workspace/mbswalay/routes/family.js:44:28 
    at Query.<anonymous> (/home/ubuntu/workspace/mbswalay/node_modules/mongoose/lib/model.js:3755:16) 
    at /home/ubuntu/workspace/mbswalay/node_modules/mongoose/node_modules/kareem/index.js:277:21 
    at /home/ubuntu/workspace/mbswalay/node_modules/mongoose/node_modules/kareem/index.js:131:16 
    at nextTickCallbackWith0Args (node.js:436:9) 
    at process._tickCallback (node.js:365:13) 

回答

0

這似乎並沒有被MongoDB中的一個錯誤,它涉及到的路由配置,這似乎使響應對象爲空