填充数据猫鼬工作不正常?
我有两个集合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。
我不完全确定你想在这里实现什么,但是你的Schema和Call看起来不对。
您正在UserMapping
模式中添加参考。如果你想使用,你需要
UserMapping.find({}).populate('userId')
这样UserMapping.find({})
将得到所有映射和populate('userId')
将与User
对象替换userId
值。
更新:
如果你想从Users
获取数据,然后填充映射,则需要在User
架构添加userMappingId
参考。
而且,在我看来userId
的type
应该是mongoose.Schema.ObjectId
例
如果你想获取文章及其作者的列表中,你将不得不在Article
架构添加userId
参考。
Article.find().populate("userId")
Usermapping集合结构是userId和groupId,在这种情况下,我也在用户架构中引用UsermappingId。 –
嗨,阿妮塔。你不需要双方的参考。我给你看了两个选择。如果您在'User'中提供UserMapping的引用,那么您可以使用'User'模式并填充'UsermappingId'。 但是你在'UserMapping'中给出了'userId'的引用。这样,您将不得不'UserMapping.find' –
您将不得不使用添加引用来获取记录的模式。 –
更新你的代码,你将数据保存到用户和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);
// }
// })
}
})
}
});
一个问题是objectId是保存用于参考的目的。或者其他一些独特的,这是唯一的,我们必须使用它。 –
谢谢你的回答,对我很满意 –
Mongoose只支持'_id'给人口。没有其他领域,但是这可能是唯一的,但不包括人口。 – nurulnabi
您正在用户模型上填充,而引用存储在userMapping中。再次检查。 – nurulnabi
我想在获取表单用户集合的同时获取数据。请告诉我该怎么做。 –
因为您需要在用户架构中添加一个字段为userId:{type:mongoose.Schema。Types.ObjectId,ref:'UserMapping'}' – nurulnabi