【问题标题】:NodeJs/Mongoose - Unable to find data from an Object idNodeJs/Mongoose - 无法从对象 ID 中找到数据
【发布时间】:2017-09-03 07:54:34
【问题描述】:

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

这是我使用的代码,

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,但是当我尝试打印该公司的名称时,它返回未定义。

这是 Company 集合条目,它有 name 字段,对象 id 与我上面打印的相同

我哪里错了? 如果您需要更多信息,请告诉我 谢谢

【问题讨论】:

  • “我哪里错了?” 我们怎么知道?这里没有执行查询的代码。这实际上是您需要向我们展示的唯一代码,而且它甚至不在这里。\
  • @NeilLunn 如果您注意,他正在打印req.user.company,它显示为 ObjectId,而不是对象本身。他没有填充那个领域。我认为这很明显,即使代码不明确。
  • 您的评论说:here because if it was an issue of a missing "populate" then the field reference value would be there and not undefined。它在那里,看看他的代码company: 59aab09745db5532c4321742。你是盲人还是只是倾斜?

标签: node.js mongodb mongoose


【解决方案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 的字符串。如果您希望引用不是字符串,而是它所引用的对象,则必须这样做。

【讨论】:

  • 只要注意他的代码。他印刷公司,是一根绳子,而不是一个物体。这是不填充该字段的明显问题。我看不出我的假设有什么问题。 undefined 不是req.user.company 的值而是req.user.company.whatever 的值,因为req.user.company 是一个字符串。
  • @NeilLunn 你投了反对票,因为你不明白我的观点,你没有看到你错了。搞笑。
  • 我投了反对票,因为undefined 只是引用输入值未定义的结果。与填充无关,也没有尝试在问题中显示“查询”。无知和不良态度真的只是奖励原因
  • @NeilLunn 我顺便编辑了答案,所以你可以看到这一点,因为你完全错过了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
  • 2020-11-15
  • 2020-07-26
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 2021-10-06
相关资源
最近更新 更多