数组未添加到数组中的对象

时间:2015-08-23 10:06:04

标签: javascript node.js mongodb mongoose

我想组合来自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)什么是更有效的解决方案?

1 个答案:

答案 0 :(得分:0)

显然你无法直接扩展Mongoose结果。要使其工作,必须在要扩展的对象上调用.toObject()。

我希望有一个更清洁的解决方案的建议,最好只涉及一个mongodb呼叫,而不需要手动阵列操作。