js组合对象只返回一个id

时间:2015-03-02 15:03:52

标签: javascript node.js mongodb mongoose

我在mongoose中做了几个发现然后当我尝试组合数据时它只显示id而不是整个对象。但是,如果我console.log()特定于对象,它将显示所有内容。

以下是我在猫鼬中的两个发现:

Project.find({ title: data.title }, function (err, projectObject) {
    if (err || !projectObject) cb(err, null);

    var project = new Object();
    for(var key in projectObject)
        if (undefined !== projectObject[key])
            project[key] = projectObject[key];

    Attachment.find({ projects: [ project._id ] }, function (err, attachments) {
        if (err) cb(err, null);

        if (attachments) 
            for (var i in attachments)
                project.attachments.push(attachments[i]);

        Location.find({ projects: [ project._id ] }, function (err, locations) {
            if (err) cb(err, null);

            if (locations)
                 for (var i in locations)
                    project.location.push(locations[i]);
        });
    });
});

如果我现在执行console.log(project),它将显示:

{  
   '_id': 'ad5ffeb5a5a5fa763a64f3',
   'title': 'Tested project',
   'body': 'This is the content for the project.',
   __v: 0,
   'date_created': 'Wed Jan 07 2015 10:34:06   GMT-0600 (CST)',
   'location':[  
      'ad5ffeb5a5a5fa763a64f4'
   ],
   'moderator':[  
      'b041516116c16a1c5fb'
   ]
}

现在如果我做console.log(project.location)这就是显示的内容(来自同一个对象):

[  
   {  
      '_id': 'ad5ffeb5a5a5fa763a64f4',
      'name': 'home',
      'city': 'Columbia',
      'state': 'MO',
      'postcode': '65203',
      'country': 'US',
      'timezone': 'CST',
      '__v': 0,
      'geo':{  
         'type':'Point',
         'coordinates':[  
            -92.339894,
            38.962357
         ]
      }
   }
]

这是我感到困惑的地方,因为对象在那里,但它只显示id而不是整个对象。

我想知道我做错了什么,甚至是否有更好的方法来做这件事?

1 个答案:

答案 0 :(得分:2)

Mongoose模型实例文档经过自定义,通常会将其可访问内容限制为其架构中定义的内容。因此,如果您想自由操作其内容,请在查询中调用lean(),以便它们返回纯JavaScript对象。

Project.find({ title: data.title }).lean().exec(function (err, projectObject) { ...

但在这种情况下,最好利用Mongoose的population支持,它可以为您跟踪ObjectID引用。