Mongoose 是 MongoDB 非官方的 Object-Document Mapping(ODM)库,它在 Node.js 应用程序中对使用 MongoDB 做数据存储的操作提供了更高层次的抽象,使操作更简单、更直观。在 Mongoose 中,查询是非常重要的操作之一,今天我们就来详细讲解一下 Mongoose 中的查询字符串。
Mongoose 查询方法
在 Mongoose 中,有两种查询方法,分别是 find()
和 findOne()
。find()
会返回一个数组,而 findOne()
则只返回一个对象。这两种方法都接收一个查询对象作为参数,这个查询对象描述了我们要查找的文档的条件。
查询对象
查询对象是一个 JavaScript 对象,可以包含多个键值对,每个键值对用来描述一个查询条件。在 Mongoose 中,查询条件需要使用 MongoDB 的查询语法,比如 $eq
代表等于, $ne
代表不等于,$lt
代表小于等于,$gt
代表大于等于,等等。
下面是一个查询对象的例子:
const query = { age: { $gt: 18 }, name: { $regex: /^m/i }, email: { $exists: true } };
这个查询对象描述了查询年龄大于 18 岁,名字以 M 开头(不区分大小写),且有 email 的文档。
使用查询对象进行查询
可以使用 find()
或 findOne()
方法进行查询:
-- -------------------- ---- ------- ----- ------ - --------------------------- -- ---------- ------------------ ----- ---- -- - -- ----- ----- ---- ----------------- --- -- ----------- --------------------- ----- ---- -- - -- ----- ----- ---- ----------------- ---
查询字符串
另外一种查询数据的方式是使用查询字符串。查询字符串要比查询对象简单很多,它是以一种更加自然的语言描述查询条件的,而且支持更多的操作符。
下面是一个查询字符串的例子:
const queryStr = "age>18&name=/^m/i&email";
这个查询字符串描述了查询年龄大于 18 岁,名字以 M 开头(不区分大小写),且有 email 的文档。
使用查询字符串进行查询
可以使用 find()
方法的第二个参数来指定查询字符串:
// 查找所有满足条件的人 Person.find(null, null, {query: queryStr}, (err, res) => { if (err) throw err; console.log(res); });
这个查询语句将会查找所有满足条件的人。
查询字符串中的比较符号
以下是比较符号,可以使用它来构造查询字符串:
操作符 | 描述 |
---|---|
$eq |
等于 |
$ne |
不等于 |
$lt |
小于 |
$lte |
小于等于 |
$gt |
大于 |
$gte |
大于等于 |
例如,以下查询字符串表示查询年龄大于等于 18 岁和小于等于 30 岁的文档:
const queryStr = "age[$gte]=18&age[$lte]=30";
查询字符串中的逻辑符号
以下是逻辑符号,可以使用它来构造查询字符串:
操作符 | 描述 |
---|---|
& |
逻辑与 |
| |
逻辑或 |
! |
逻辑非 |
例如,以下查询字符串表示查询名字以“m”开头的且没有 email 的人,且年龄在 18 到 30 岁之间:
const queryStr = "name=/^m/i&email![1]&age[$gte]=18&age[$lte]=30";
查询字符串中的正则表达式
我们可以在查询字符串中使用正则表达式来进行模糊查询。查询字符串中的正则表达式需要用斜杠括起来,例如:
const queryStr = "name=/^m/i";
这个查询字符串表示查找名字以“m”开头的人(不区分大小写)。
结论
通过 Mongoose 中的查询字符串,我们可以灵活地构造出符合需求的查询条件,使操作更加简单、直观。希望本文可以帮助读者更好地理解和使用 Mongoose。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f46506f40ec5a964ecc91a