js组合对象只返回一个id

js combining objects only returns an id

本文关键字:一个 id 组合 对象 返回 js      更新时间:2023-09-26

我在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,而不是整个对象。

我想知道我是不是做错了什么,或者有更好的方法吗?

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

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

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