Node.js ObjectId不';找不到ObjectId

Node.js ObjectId不';找不到ObjectId,node.js,mongoose,Node.js,Mongoose,我的数据库包含以下数据: db.users.find() { "_id" : ObjectId("5580c79aa11e7310b2985ab1"), "email" : "an_email", "color" : "", "username" : "", "__v" : 0 } 我使用以下语法使用Mongoose查询它: User.findById("5580c79aa11e7310b2985ab1", function(error, user) { } 它为错误和用户返回null。奇怪

我的数据库包含以下数据:

db.users.find()
{ "_id" : ObjectId("5580c79aa11e7310b2985ab1"), "email" : "an_email", "color" : "", "username" : "", "__v" : 0 }
我使用以下语法使用Mongoose查询它:

User.findById("5580c79aa11e7310b2985ab1", function(error, user) { }
它为错误和用户返回null。奇怪的是,Mongoose的调试显示了以下正确的查询:

users.findOne({ _id: ObjectId("5580c79aa11e7310b2985ab1") })
在MongoDB上直接查询到的查找到预期数据:

db.users.findOne({ _id: new ObjectId("5580c79aa11e7310b2985ab1") })
{
    "_id" : ObjectId("5580c79aa11e7310b2985ab1"),
    "email" : "an_email",
    "color" : "",
    "username" : "",
    "__v" : 0
}
用findOne替换findById并查找电子邮件。我真的不知道了。。。有什么建议吗?

findById()需要id,而不是对象。例如:

Book.findById(req.user.id, function(err, book) {...}

findOne()需要一个对象才能正常工作。

这似乎是Mongoose 4.x的一个bug-我恢复到Mongoose 3.8,一切正常。

抱歉-我不清楚。req.user是一个包含ID的字符串。我已经在上面对其进行了更正,以使其更清晰。我还尝试手动实例化ObjectId,并将其放入findById中,结果与传递
\u id
作为查询
findOne()
的结果相同(null)
User.findOne({u id:{5580c79aa11e7310b2985ab1},函数(e,u){})
尝试了所有这些-如下所述,我认为这是Mongoose4的一个bug。*与最新版本的MongoDB(和节点0.12?)结合使用,
findById
在模拟您在节点0.12.4上使用Mongoose 4.0.5所做的尝试时工作正常。有趣的是,您使用的是哪个版本的MongoDB?这将帮助我确定我将要在Gitub上打开的问题,这个问题被提出了——似乎我至少不是唯一一个有问题的人:)谢谢你的帮助!