在Mongoose中,
Model.findById()
函数用于通过
_id
查找一个文档。
findById()
函数接受单个参数,即文档ID。如果MongoDB找到具有给定
id
的文档,则它返回解析为Mongoose文档的Promise,否则返回
null
。
const schema = new mongoose.Schema({ _id: Number }, { versionKey: false });
const Model = mongoose.model('MyModel', schema);
await Model.create({ _id: 1 });
await Model.findById(1);
await Model.findById(2);
当您调用
findById(_id)
时,Mongoose在幕后调用
findOne({ _id })
。这意味着
findById()
会触发
findOne()
中间件。
const schema = new mongoose.Schema({ _id: Number }, { versionKey: false });
schema.pre('findOne', function() {
console.log('Called `findOne()`');
});
const Model = mongoose.model('MyModel', schema);
await Model.create({ _id: 1 });
await Model.findById(1);
Mongoose将查询转换为与您的模式匹配。 这意味着如果您的_id
是MongoDB ObjectId,则可以将_id
作为字符串传递,Mongoose会将其转换为ObjectId。
const _id = '5d273f9ed58f5e7093b549b0';
const schema = new mongoose.Schema({ _id: mongoose.ObjectId }, { versionKey: false });
const Model = mongoose.model('MyModel', schema);
await Model.create({ _id: new mongoose.Types.ObjectId(_id) });
typeof _id;
const doc = await Model.findById(_id);
typeof doc._id;
doc._id instanceof mongoose.Types.ObjectId;
源代码
collection.find({"_id": ObjectId(theidID)})
应该可以运行。 - Bernie Hackett