2017-04-25 90 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