Mongoose 是 Node.js 中常用的一个 MongoDB 驱动程序,它提供了非常方便的 API,可以让我们更加轻松地操作 MongoDB 数据库。在 Mongoose 中,查询数据是非常重要的一部分,本文将详细介绍 Mongoose 中的查询数据操作。
前置知识
在学习 Mongoose 查询数据之前,我们需要先了解一些 MongoDB 的基本概念。在 MongoDB 中,数据存储在集合(Collection)中,每个集合中可以包含多个文档(Document),文档是 MongoDB 中的最小存储单位。每个文档是一个 JSON 对象,可以包含任意数量的键值对。
查询语法
Mongoose 提供了非常方便的查询语法,可以满足各种查询需求。下面是一些常用的查询方法:
1. find
find 方法是 Mongoose 中最常用的查询方法,用于查找符合条件的所有文档。它的语法如下:
Model.find(conditions, [projection], [options], [callback])
- conditions:查询条件,可以是一个对象或者一个查询语句。
- projection:可选,指定需要返回的字段。
- options:可选,指定查询选项,比如排序、分页等。
- callback:可选,查询完成后的回调函数。
下面是一个示例代码:
// www.javascriptcn.com code example
const User = require('./models/user');
// 查询所有用户
User.find({}, (err, users) => {
if (err) {
console.error(err);
return;
}
console.log(users);
});
// 查询年龄大于 18 岁的用户
User.find({ age: { $gt: 18 } }, (err, users) => {
if (err) {
console.error(err);
return;
}
console.log(users);
});
// 只返回用户名和邮箱
User.find({}, 'username email', (err, users) => {
if (err) {
console.error(err);
return;
}
console.log(users);
});
// 按照年龄降序排列
User.find({}, null, { sort: { age: -1 } }, (err, users) => {
if (err) {
console.error(err);
return;
}
console.log(users);
});
// 分页查询,每页 10 条数据
User.find({}, null, { skip: 10, limit: 10 }, (err, users) => {
if (err) {
console.error(err);
return;
}
console.log(users);
});2. findOne
findOne 方法用于查找符合条件的第一个文档。它的语法和 find 方法类似,只是返回的是一个文档对象,而不是文档对象数组。
Model.findOne(conditions, [projection], [options], [callback])
下面是一个示例代码:
// www.javascriptcn.com code example
const User = require('./models/user');
// 查询年龄最大的用户
User.findOne({}, null, { sort: { age: -1 } }, (err, user) => {
if (err) {
console.error(err);
return;
}
console.log(user);
});
// 只返回用户名和邮箱
User.findOne({}, 'username email', (err, user) => {
if (err) {
console.error(err);
return;
}
console.log(user);
});3. count
count 方法用于统计符合条件的文档数量。它的语法如下:
Model.count(conditions, [callback])
下面是一个示例代码:
// www.javascriptcn.com code example
const User = require('./models/user');
// 统计用户数量
User.count({}, (err, count) => {
if (err) {
console.error(err);
return;
}
console.log(count);
});
// 统计年龄大于 18 岁的用户数量
User.count({ age: { $gt: 18 } }, (err, count) => {
if (err) {
console.error(err);
return;
}
console.log(count);
});4. distinct
distinct 方法用于查询符合条件的文档中某个字段的不同取值。它的语法如下:
Model.distinct(field, [conditions], [callback])
下面是一个示例代码:
// www.javascriptcn.com code example
const User = require('./models/user');
// 查询所有用户的年龄
User.distinct('age', (err, ages) => {
if (err) {
console.error(err);
return;
}
console.log(ages);
});
// 查询年龄大于 18 岁的用户的城市
User.distinct('city', { age: { $gt: 18 } }, (err, cities) => {
if (err) {
console.error(err);
return;
}
console.log(cities);
});查询条件
在 Mongoose 中,查询条件可以是一个对象,也可以是一个查询语句。查询语句使用 MongoDB 的查询语法,比如 $gt、$lt、$in 等。
下面是一些常用的查询条件:
1. 等于
User.find({ username: '张三' }, (err, users) => {
if (err) {
console.error(err);
return;
}
console.log(users);
});2. 大于
User.find({ age: { $gt: 18 } }, (err, users) => {
if (err) {
console.error(err);
return;
}
console.log(users);
});3. 小于
User.find({ age: { $lt: 18 } }, (err, users) => {
if (err) {
console.error(err);
return;
}
console.log(users);
});4. 不等于
User.find({ username: { $ne: '张三' } }, (err, users) => {
if (err) {
console.error(err);
return;
}
console.log(users);
});5. 包含
User.find({ hobbies: { $in: ['游泳', '跑步'] } }, (err, users) => {
if (err) {
console.error(err);
return;
}
console.log(users);
});6. 不包含
User.find({ hobbies: { $nin: ['游泳', '跑步'] } }, (err, users) => {
if (err) {
console.error(err);
return;
}
console.log(users);
});结语
本文介绍了 Mongoose 中的查询数据操作,包括查询语法、查询方法和查询条件。希望能对大家学习 Mongoose 有所帮助。如果您有任何问题或建议,请在评论区留言。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d907fea941bf7134073c10