我想组合来自MongoDB的两个数组:联系对象数组和约会数组。
我目前的解决方案是查询所有联系人和约会,循环每个数组,比较电子邮件,如果匹配,将每个约会添加到相应的联系人。
var contacts, appointments;
Contact.find(query, function(err, result1) {
if (err) {
console.log(err)
}
else {
contacts = result1;
Appointment.find({isArchived : false}, function(err, result2) {
if (err) {
console.log(err);
}
else {
appointments = result2;
for (var i=0; i<contacts.length;i++) {
contacts[i]["appointments"] = [];
for (var j=0; j<appointments.length;j++) {
if (contacts[i].email === appointments[j].owner) {
contacts[i].appointments.push(appointments[j]);
}
}
}
res.send(contacts);
}
});
}
});
联系人:
[{
email: "example1@example1.com"
}, {
email: "example2@example2.com"
}]
[{
email: "example1@example1.com",
start: "2015-01-01",
end: "2015-02-01"
}, {
email: "example1@example1.com",
start: "2015-02-01",
end: "2015-03-01"
}]
// Desired output
[{
email: "example1@example1.com",
appointments: [{
email: "example1@example1.com",
start: "2015-01-01",
end: "2015-02-01"
}, {
email: "example1@example1.com",
start: "2015-02-01",
end: "2015-03-01"
}]
}, {
email: "example2@example2.com",
appointments: []
}]
我知道这很乱,我也无法将约会数组附加到每个联系人。我只能为现有的对象键赋值。
所以这真的有两个问题:1)为什么我不能将数组附加到现有联系人,2)什么是更有效的解决方案?
答案 0 :(得分:0)
显然你无法直接扩展Mongoose结果。要使其工作,必须在要扩展的对象上调用.toObject()。
我希望有一个更清洁的解决方案的建议,最好只涉及一个mongodb呼叫,而不需要手动阵列操作。