findOne不使用mongoose

时间:2016-07-29 12:26:24

标签: mongodb mongoose

我发现一个人没有返回结果。我尝试了几个不同的东西,但它似乎没有返回正确的结果。至少,我没有回复。

我试过这个:

var ObjectId = require('mongoose').Types.ObjectId;

m_Kbase_data.findOne( {_id : new Object(req.params.m_id)}, function(err, kbase_data){

另外,我在没有Object的情况下尝试过它。

我得到了

的结果
kbase_data.length === 0

但是,当我运行时:

m_Kbase_data.find({_id : req.params.m_id}, function(err, kbase_data){

我找到了唯一正确的文件。我觉得这很奇怪。

思想?

4 个答案:

答案 0 :(得分:3)

这可能会对您有所帮助: -

 var ObjectID = require('mongodb').ObjectID;
 var ObjectId = require('mongoose').Types.ObjectId; //For mongoose

 m_Kbase_data.findOne( {_id : new ObjectID(req.params.m_id)}, function(err, kbase_data){});

希望这会对你有所帮助。

答案 1 :(得分:1)

对象id实际上是一个字符串,所以代码

{_id : req.params.m_id}

是对的。尝试用对象

来做
{_id : new Object(req.params.m_id)}

相同
{_id : {"0":req.params.m_id}}

和_id显然不包含任何对象

答案 2 :(得分:0)

在查询中使用ObjectId而不是object

var ObjectId = require('mongoose').Types.ObjectId;

m_Kbase_data.findOne( {_id : new ObjectId(req.params.m_id)}, function(err, kbase_data){

答案 3 :(得分:0)

无需将字符串强制转换为ObjectId,因为Mongoose已经为您执行了此操作,只需执行

m_Kbase_data.findOne({_id: req.params.m_id}, function(err, kbase_data) { ... }

或使用findById()签名

m_Kbase_data.findById(req.params.m_id, function(err, kbase_data) { ... }