2017-04-25 47 views
2

我有两个集合useruserMapping用户对象被映射到usermapping集合与其他信息。我正在使用它的引用。填充数据猫鼬工作不正常?

这是我所创建的模式:

var userSchema = new userSchema({ 
    userId : {type : mongoose.Schema.Types.ObjectId, ref : 'UserMapping'}, 
    firstName: { type: String, required: true}, 
    middleName : String, 
    lastName: { type: String, required: true}, 
    jobTitle : String, 
    signumId : { type: String, required: true}, 
    //userGroupId : { type: String, required: true}, 
    emailAddress : { type: String, required: true, unique: true}, 
    contactNumber : String, 
    status : Boolean, 
    image : String, 
    createdDate : String, 
    lastUpdatedData : String, 
    lastLogin: String 
}); 
    var userModel = mongoose.model('User', userSchema); 

而且UserMapping模式是:

var userMappingSchema = new userMappingSchema({ 
    userId: String, 
    userGroupId : { type: String, required: true}, 
    createdDate : String, 
    lastUpdatedData : String 
}); 

var userMappingModel = mongoose.model('UserMapping', userMappingSchema); 

,之后我想填充数据,我只能从获取数据用户集合,但不是来自用户映射集合。

代码为DB节省:

var userMappingWithGroup = new userMapping({ 
         "userId": newUser._id, 
         "userGroupId": req.body.userGroupId 
        }); 

        userMappingWithGroup.save(function(err, userGroup) { 
         if (err) { 
          res.json({ 
           "message": err.message, 
           "statusCode": err.code 
          }); 
         } else { 
          newUser.userId = userGroup._id 
          newUser.save(function(err) { 
           if(err){ 
            res.json({ 
             "message": err.message, 
             "statusCode": err.code 
            }); 
           }else{ 
            customError.errCode = 113; 
            next(customError); 
           } 
          }); 
         } 
        }); 

在这里,我是为填充代码:

var User = require('../models/user').userModel; 
    var userMapping = require('../models/userMapping').userMappingModel; 

    var fetchEditUser = function(req, res) { 
     console.log(req.params._id); 
     User.findOne({userId: req.params._id}) 
      .populate('userId') 
      .exec(function (err, result) { 
      if(err) { 
       res.json({"message":"Error On Fetching Users from DB", "errorCode":500 }); 
      } 
      else { 
       console.log(result); 
       res.json({"message":"success", "errorCode":200, "data": result }); 
      } 
     }); 
}; 

任何人可以帮助我在哪里,我做错了,我是新来的MongoDB。

+3

您正在用户模型上填充,而引用存储在userMapping中。再次检查。 – nurulnabi

+0

我想在获取表单用户集合的同时获取数据。请告诉我该怎么做。 –

+0

因为您需要在用户架构中添加一个字段为userId:{type:mongoose.Schema。Types.ObjectId,ref:'UserMapping'}' – nurulnabi

回答

1

我不完全确定你想在这里实现什么,但是你的Schema和Call看起来不对。

您正在UserMapping模式中添加参考。如果你想使用,你需要

UserMapping.find({}).populate('userId')

这样UserMapping.find({})将得到所有映射和populate('userId')将与User对象替换userId值。

更新:
如果你想从Users获取数据,然后填充映射,则需要在User架构添加userMappingId参考。

而且,在我看来userIdtype应该是mongoose.Schema.ObjectId


如果你想获取文章及其作者的列表中,你将不得不在Article架构添加userId参考。

Article.find().populate("userId")

看一看这样的: http://mongoosejs.com/docs/populate.html

+0

Usermapping集合结构是userId和groupId,在这种情况下,我也在用户架构中引用UsermappingId。 –

+0

嗨,阿妮塔。你不需要双方的参考。我给你看了两个选择。如果您在'User'中提供UserMapping的引用,那么您可以使用'User'模式并填充'UsermappingId'。 但是你在'UserMapping'中给出了'userId'的引用。这样,您将不得不'UserMapping.find' –

+0

您将不得不使用添加引用来获取记录的模式。 –

0

更新你的代码,你将数据保存到用户和userMapping。在保存用户的最后一个地方,有两部分可以应用。

var userMappingWithGroup = new userMapping({ 
     "userId": "", 
     "userGroupId": req.body.userGroupId 
    }); 

    userMappingWithGroup.save(function(err, doc) { 
     if (err) { 
      res.json({ 
       "message": err.message, 
       "statusCode": err.code 
      }); 
     } else { 
      // customError.errCode = 113; 
      // next(customError); 
      var newUser = new user(req.body); 
      newUser.userId = doc._id 
      newUser.save(function(err, user){ 
       if(err){ 
        res.json({ 
         "message": err.message, 
         "statusCode": err.code 
        }); 
       }else{ 

        //////////// this ////////////////////// 
        customError.errCode = 113; 
        next(customError); 

        ///////////// OR /////////////////////// 

        // userMappingWithGroup.userId = user._id; 
        // userMappingWithGroup.save(function(err, res){ 
        //  if (err) { 
        //   res.json({ 
        //    "message": err.message, 
        //    "statusCode": err.code 
        //   }); 
        //  } else { 
        //   customError.errCode = 113; 
        //   next(customError); 
        //  } 
        // }) 
       } 
      }) 
     } 
    }); 
+0

一个问题是objectId是保存用于参考的目的。或者其他一些独特的,这是唯一的,我们必须使用它。 –

+0

谢谢你的回答,对我很满意 –

+0

Mongoose只支持'_id'给人口。没有其他领域,但是这可能是唯一的,但不包括人口。 – nurulnabi