MongoDB findOne 功能在与 id 比较时返回 null



当我将用户的 id 作为参数传递时,我使用以下代码来获取用户的详细信息:

server.get("/users/:id", (req, res) => {
const itemId = req.params.id;
dbCollection.findOne({ _id: itemId }, (error, result) => {
if (error) throw error;
// return item
res.json(result);
});
});

但是,这似乎不起作用,因为每当我运行代码时,我都会返回一个 null 值。 我的问题与之前问过的许多问题不同,因为我的 id 是ObjectId('randomId'),而不是字符串。如何修复我的代码?

req.params.id

以字符串形式出现,而您的_id是ObjectId,因此这不起作用,因为MongoDB首先要求类型相等,您需要强制转换值:

const itemId = mongoose.Types.ObjectId(req.params.id);

MongoDB不会将"itemId"视为MongoDB ID,因此您需要对其进行转换,如下所示:

new mongodb.ObjectId(itemId)

这意味着:

const mongodb = require('mongodb')

正如其他人已经说过的,MongoDB希望_id是一个ObjectID。但是,如果您正在搜索一个项目,而不是使用findOne请使用findById,它接受 id 作为字符串。

const { Model } = require('./models'); // Model is your Mongoose Schema
server.get("/users/:id", async (req, res) => {
const { id } = req.params;
// This is the same as Model.findOne({ _id: new ObjectId(id) });
const item = await Model.findById(id);
return res.json(item);
});

最新更新