填充数据mongoose工作不正常?
我有两个集合user
和userMapping
用户对象被映射到与其他信息的用户映射集合。 我正在使用它的参考。
这是我创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
的引用。
另外,在我看来, userId
的type
应该是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); // } // }) } }) } });