使用Mongoose查询是否必须先创建模型?无Schema如何查询集合?
Mongoose查询相关问题解答
1. 执行数据库查询必须先创建Model吗?
不是必须的。虽然Mongoose的常规用法是基于Schema定义Model,再通过Model操作集合(就像你给出的官方示例那样),这种方式能利用Schema的数据校验、中间件、虚拟属性等特性,但你也可以直接绕过Model,直接操作数据库集合。
官方示例的Model查询方式:
const Person = mongoose.model('Person', yourSchema); // 查询姓氏为'Ghost'的人,只返回name和occupation字段 const person = await Person.findOne({ 'name.last': 'Ghost' }, 'name occupation');
2. 不定义Schema,直接通过集合名称查询的方法
你可以通过Mongoose的connection对象获取目标集合,然后调用MongoDB原生驱动的查询方法,代码示例如下:
// 获取指定集合 const personCollection = mongoose.connection.collection('persons'); // 原生查询:查询姓氏为'Ghost'的文档,只返回name和occupation字段 const person = await personCollection.findOne( { 'name.last': 'Ghost' }, { projection: { name: 1, occupation: 1, _id: 0 } } );
注意:这种方式不会用到Mongoose的Schema相关特性,比如数据校验、自动类型转换,完全遵循原生MongoDB驱动的操作逻辑。
内容的提问来源于stack exchange,提问作者TungTung
相关产品推荐
相关产品推荐

