我在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而不是整个对象。
我想知道我做错了什么,甚至是否有更好的方法来做这件事?
答案 0 :(得分:2)
Mongoose模型实例文档经过自定义,通常会将其可访问内容限制为其架构中定义的内容。因此,如果您想自由操作其内容,请在查询中调用lean()
,以便它们返回纯JavaScript对象。
Project.find({ title: data.title }).lean().exec(function (err, projectObject) { ...
但在这种情况下,最好利用Mongoose的population
支持,它可以为您跟踪ObjectID引用。