我正在使用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);
});
答案 0 :(得分:1)
find
提供了一个游标作为其回调的第二个参数(在您的示例中为document
)。要查找单个文档,请改用findOne
:
collection.findOne({'_id': sid }, function(err, document) {
console.log(document.title);
});