无法让猫鼬 findById() 工作

Posted

技术标签:

【中文标题】无法让猫鼬 findById() 工作【英文标题】:Can't get mongoose findById() working 【发布时间】:2017-01-05 03:51:24 【问题描述】:

来自 Mongo Shell

db.messages.find(_id:ObjectId('57b12ca68ea2e15c182044f3'))

工作并将记录打印到屏幕上。

来自快递http://localhost:3000/messages/57b12ca68ea2e15c182044f3

app.get('/messages/:id', function (req, res) 
  console.log('Searching user with ID: ' + req.params.id);

  // message is always null, have tried without "mongoose.Types.ObjectId" but it is still null
  Message.findById(mongoose.Types.ObjectId(req.params.id), function(err, message) 
    console.log('Found record');

    res.setHeader('Content-Type', 'application/json');
    res.send(JSON.stringify(message));
  );
);

我每次都得到一个空响应。我试过不使用 ObjectId 包装器,但我仍然得到空值。 mongoDB 连接很好,因为我有一个Message.find(, function(err, messages) ... 成功返回所有消息。

我做错了什么?

【问题讨论】:

检查err是否有错误? 您能否编辑您的问题以显示Message 的架构以及您要查找的文档? 是的,但我现在没有它。明天补上。 @JohnnyHK,你把我引向了正确的方向,我在猫鼬模式中定义了_id: String, 【参考方案1】:

原来我在导致此问题的 mongoose 架构文件中错误地定义了 _id: String。删除_id 定义完全解决了这个问题。

【讨论】:

以上是关于无法让猫鼬 findById() 工作的主要内容,如果未能解决你的问题,请参考以下文章

猫鼬不会执行findById回调

不能让猫鼬 find().then() 工作

无法“删除”猫鼬文档中对象的属性[重复]

如何让猫鼬将一组 url 推送到数组子文档

如何让猫鼬列出集合中的所有文档?判断集合是不是为空?

反向填充猫鼬