2017-08-16 50 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中的一个错误,它涉及到的路由配置,这似乎使响应对象为空