Mongo和Node.js:无法通过_id查找文档

时间:2014-08-23 00:48:41

标签: node-mongodb-native

我正在使用Express框架和Mongodb作为我的应用程序。

当我将对象插入数据库时​​,我使用自定义ObjectID。它是使用mongo的objectid函数生成的,但是toString()ed(因为我认为是不相关的,所以我不会进入它们)。插入内容如下所示:

collection.insert({ _id: oid, ... })

数据是在mongo中 - 我可以从mongo的cli中获取db.collection.find()。pretty(),并且看起来与它应该是完全一样。但是当我从我的应用程序运行db.collection.find({_id: oid})时,我什么都没得到([]确切地说)。即使我手动将我正在寻找的objectID(我知道在我的数据库中)硬编码到我的查询中,我仍然无法获得实际结果。

作为一项实验,我尝试了应用中的collection.find({title: "test title"}),并得到了我想要的结果。数据库连接很好,数据结构很好,数据本身很好 - 问题显然在于_id字段。

查询代码:

var sid = req.param("sid");
var db = req.db;
var collection = db.get("stories");
collection.find({'_id': sid }, function(err, document) {
  console.log(document.title);
});

有关如何通过搜索_id获取文档的任何想法?

更新:根据JohnnyHK的回答,我现在正在使用findOne(),如下例所示。但是,它现在返回null(而不是我 获得的[])。如果我自己找到解决方案,我会更新。

collection.findOne({'_id': sid }, function(err, document) {
  console.log(document);
});

1 个答案:

答案 0 :(得分:1)

find提供了一个游标作为其回调的第二个参数(在您的示例中为document)。要查找单个文档,请改用findOne

collection.findOne({'_id': sid }, function(err, document) {
  console.log(document.title);
});