填充数据在mongoose中无法正常工作?

时间:2017-04-25 14:04:55

标签: node.js mongodb

我有两个集合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的新手。

2 个答案:

答案 0 :(得分:1)

我不完全确定你在这里尝试实现的目标,但你的架构和通话看起来不对。

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

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

这样UserMapping.find({})将获得所有映射,而populate('userId')会将userId值替换为User的对象。

<强>更新
如果您要从Users 获取数据,然后填充映射,则需要在userMappingId架构中添加User的引用。

此外,我认为type的{​​{1}}应为userId

示例
如果要获取文章列表及其作者,则必须在mongoose.Schema.ObjectId架构中添加userId引用。

Article

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

答案 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);
                     //     }
                     // })
                }
            })
        }
    });