填充数据mongoose工作不正常?

我有两个集合useruserMapping用户对象被映射到与其他信息的用户映射集合。 我正在使用它的参考。

这是我创build的模式:

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

之后,我正在尝试填充数据,我只从用户集合中获取数据,而不是从usermapping集合中获取数据。

保存在数据库中的代码:

  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。

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

您正在UserMapping架构中添加引用。 如果你想用这个,你需要

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

因此, UserMapping.find({})将获取所有映射并populate('userId')将用User的对象replaceuserId值。

更新:
如果要从Users获取数据 ,然后填充映射,则需要在User模式中添加userMappingId的引用。

另外,在我看来, userIdtype应该是mongoose.Schema.ObjectId


如果要获取文章及其作者列表,则必须在Article模式中添加userId引用。

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

看看这个: http : //mongoosejs.com/docs/populate.html

更新您的代码保存数据到用户和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); // } // }) } }) } });