在MongoDB中如何按照自定义_id字段筛选查询对应文档数据?
问题排查与解决方法
- 字段类型不匹配
你当前查询的_id是数值类型1,如果入库时你将_id存为了字符串类型"1",类型不一致会导致匹配失败。你可以先查看数据库内对应数据的_id字段类型,如果是字符串,把查询条件改为{"_id": "1"}即可。 - Mongoose Schema未指定自定义_id类型
如果你使用Mongoose操作MongoDB,Schema的_id字段默认是ObjectId类型,你自定义了数值或字符串类型的_id时,需要在Schema中显式声明_id的实际类型:
const competitionSchema = new mongoose.Schema({ _id: Number, // 若_id实际为字符串类型,此处替换为String // 其余字段正常定义 })
未做该声明时,Mongoose会自动将查询时传入的1转为ObjectId格式,和数据库内你自定义的_id无法匹配。
- 集合名称不匹配
确认competitionTemplateCopy模型对应的集合,和你存入自定义_id数据的集合一致。Mongoose默认会将模型名转为小写复数作为集合名,如果你使用了自定义集合名,需要在Schema配置中指定:
const competitionSchema = new mongoose.Schema({ // 字段定义 }, { collection: '你的实际集合名称' })
参考修改后代码
// 先确保Schema定义正确 const competitionTemplateSchema = new mongoose.Schema({ _id: Number, // 你的其余字段定义 }, { collection: '你实际的集合名' }) const competitionTemplateCopy = mongoose.model('competitionTemplate', competitionTemplateSchema) // 查询逻辑 router.get('/getCompetitions', (request, response) => { competitionTemplateCopy.find({"_id": 1}) .then(data => response.json(data)) .catch(error => response.json(error)) });
内容的提问来源于stack exchange,提问作者AntonHPL
相关产品推荐
相关产品推荐

