在猫鼬中合并两个对象 [英] Merge two objects in mongoose
本文介绍了在猫鼬中合并两个对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在猫鼬的user.js
和userProfile.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屋!
查看全文