NodeJs / Mongoose - 无法从Object id中查找数据

时间:2017-09-02 23:30:18

标签: node.js mongodb mongoose

我在mongo数据库中有一个User集合,它有一个公司字段,它是对另一个名为Company的集合的引用。 我将公司分配给用户。当我尝试在公司字段内打印数据时,它返回我:undefined。

这是我使用的代码,

console.log('company: ' + req.user.company); 
if(req.user.company) 
   console.log("LOGGED IN USER" + "\n Email:" + req.user.username + "\n Psw: " + req.user.password + "\n Role: " + req.user.role + "\n Company: " + req.user.company.name);

这是终端上的回复:

company: 59aab09745db5532c4321742
LOGGED IN USER
 Email:user@admin.com
 Psw: $2a$10$Z7h3ikaDJLhLXMotV.odaerGf5RFRXxDmlVxCFdvTaL48WalNIwRy
 Role: admin
 Company: undefined

如您所见,第一个终端线显示分配给该特定用户的公司ID,但是当我尝试打印该公司的名称时,它返回undefined。

这是公司集合条目,它有名称字段,对象ID与我上面打印的相同

image

我错在哪里? 如果您需要进一步的信息,请告诉我 谢谢

1 个答案:

答案 0 :(得分:1)

你必须填充公司。

http://mongoosejs.com/docs/populate.html

打印时:

console.log('company: ' + req.user.company); 

它显示:

company: 59aab09745db5532c4321742

因此,您的req.user.company不是您期望的对象,而是对象的_id的字符串。所以必须填充。

当您使用User.findOne({...})之类的内容时,您必须像这样追加群体:

User.findOne({...}).populate("company");

对象的引用存储为包含引用文档的ObjectId的字符串。如果您希望引用不是字符串,而是它引用的对象,则必须这样做。