我有两个集合user
和userMapping
用户对象被映射到带有其他信息的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的新手。
答案 0 :(得分:1)
我不完全确定你在这里尝试实现的目标,但你的架构和通话看起来不对。
您正在UserMapping
架构中添加引用。如果你想使用它,你需要
UserMapping.find({}).populate('userId')
这样UserMapping.find({})
将获得所有映射,而populate('userId')
会将userId
值替换为User
的对象。
<强>更新强>
如果您要从Users
获取数据,然后填充映射,则需要在userMappingId
架构中添加User
的引用。
此外,我认为type
的{{1}}应为userId
示例强>
如果要获取文章列表及其作者,则必须在mongoose.Schema.ObjectId
架构中添加userId
引用。
Article
答案 1 :(得分:0)
更新您将数据保存到user和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);
// }
// })
}
})
}
});