在猫鼬中合并两个对象 [英] Merge two objects in mongoose

查看:55
本文介绍了在猫鼬中合并两个对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在猫鼬的user.jsuserProfile.js中有两个模型,我想在其中使用联接查询来获取文档,但是我没有在用户中使用 ref 模式,所以我有如下代码:

I have two models in user.js and userProfile.js of mongoose, where I want to get documents using a join query but I have not take ref in user schema so I have code as below:

user.js

var userSchema = new Schema({
     nick_name:{type:String},
     email: {type: String},
     password: {type: String},
    is_active:{type:String,enum:['1','0'],default:"1"},
},{ collection: 'user'});

userProfile.js

var userProfileSchema = new Schema({
    user_id:{type:Schema.Types.ObjectId, ref:'User'},
    first_name:{type:String},
    last_name:{type:String},
    address:{type:String},
    country:{type:String},
    state:{type:String},
    city:{type:String},
    gender:{type:String,enum:['m','f','o'],default:"m"},
    is_active:{type:String,enum:['1','0'],default:"1"},
},{ collection: 'userProfile'});

server.js

app.get('/api/userLists', function(req, res) {
    User.find({},"nick_name email",function(err, user) {
        if(err) {
            res.json(err);
        } else {
            var userIds = user.map(function(obj){
               return obj._id;
            });

            UserProfile.find({user_id:{$in:userIds}},function(err,userProfiles){
                if(err){
                    res.json(userProfiles);
                    console.log(userProfiles);
                }else{

                    ---------------------------------
                    -What to do here, I have no idea.-
                    ---------------------------------

                    res.json(user);
                }
            });

        }
    });

});

预期的输出如下

{
 "nick_name"   : "laxman",
 "email"       : "laxman@mailinator.com",
 "first_name"  : "my first name",
 "last_name"   : "my last name",
 "address"     : "my address",
 "country"     : "my country",
 "state"       : "my state",
 "city"        : "my city",
 "gender"      : "m",
}

**OR**

{
 "nick_name"   : "laxman",
 "email"       : "laxman@mailinator.com",
 "profile" :{
        "first_name"  : "my first name",
        "last_name"   : "my last name",
        "address"     : "my address",
        "country"     : "my country",
        "state"       : "my state",
        "city"        : "my city",
        "gender"      : "m",
   }
}

依赖项

"express"  => "version": "4.7.4",
"mongoose" => "version": "4.4.5",
"mongodb"  => "version": "2.4.9",
"OS"  => "ubuntu 14.04 lts 32bit",

推荐答案

请尝试使用此方法,否则您可以使用 async 承诺使代码更简洁.

Please try this one, or you could use async or promise to make codes more concisely.

MyUser.find({}, 'nick_name email', function(err, users){
    if (err)
        console.log(err);
    else {
        var len = users.length;
        var curIdx = 0;
        var newUsers = [];

        users.forEach(function(user) {
            UserProfile.findOne({user_id: user._id}, function(err, ret) {
                if (err)
                    console.log(err);
                else{
                    // combine those two objects here...
                    user.set('profile', ret.toJSON(), {strict: false})
                    newUsers.push(user);
                    ++curIdx;

                    if (curIdx == len) {
                        //console.log(newUsers);
                        res.json(newUsers);
                    }
                }
            });
        });

    }
})

这篇关于在猫鼬中合并两个对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆