Mongoose 是一个优秀的 MongoDB 驱动程序,它通过提供更优雅的 API 和更强大的功能来简化 MongoDB 的操作。在 Mongoose 中,查询是其中一个重要的功能,它可以让我们从 MongoDB 中获取数据。本文将对 Mongoose 中文文档中的查询方法进行解析,包括查询条件、返回条件以及使用示例。
查询条件
在执行查询操作时,我们需要使用查询条件来指定数据的特定属性,它们可以使用链式调用(chaining)的方式来组合。在 Mongoose 中,常用的查询条件如下:
find
:查找符合条件的全部数据findOne
:查找符合条件的一条数据findById
:根据 _id 查找数据where
:指定查询条件
除了这些基础的查询条件之外,还可以使用以下条件来组合多个查询条件:
or
:查询中满足任一条件即可and
:查询中需同时满足多个条件gt
:大于某个值gte
:大于等于某个值lt
:小于某个值lte
:小于等于某个值ne
:不等于某个值in
:属于某个数组nin
:不属于某个数组
返回条件
在查询结果中,我们常常只需要获取特定的属性。Mongoose 中提供了两种方式来指定返回的属性,一种是使用 select
来指定返回的属性,另一种是使用 populate
来填充关联文档的属性。
select
方法可以指定需要返回的属性,它接受一个字符串或者一个字符串数组,来指定需要返回的属性。如果想要排除某个属性,可以在属性前加上负号“-”。
populate
方法可以用来填充关联文档的属性,它接受一个字符串或者一个字符串数组,来指定填充的属性。如果需要填充多个属性,则可以使用对象的方式指定。
使用示例
下面是一个使用 Mongoose 查询方法的示例代码:
// javascriptcn.com 代码示例 const mongoose = require("mongoose"); mongoose.connect("mongodb://localhost/test", { useNewUrlParser: true, useUnifiedTopology: true, }); const Schema = mongoose.Schema; const UserSchema = new Schema({ name: String, age: Number, books: [{ type: Schema.Types.ObjectId, ref: "Book" }], }); const BookSchema = new Schema({ name: String, price: Number, }); const User = mongoose.model("User", UserSchema); const Book = mongoose.model("Book", BookSchema); async function test() { // 查询 age 大于 30 的用户 const users = await User.where("age").gt(30); // 查询 age 小于 30 或者虫草青花瓷的用户 const users = await User.or([{ age: { $lt: 30 } }, { name: "虫草青花瓷" }]); // 查询 age 大于 30 并且所拥有的书籍数量大于等于3的用户 const users = await User.where("age").gt(30).where("books").gte(3); // 查询一条用户的所有数据 const user = await User.findOne({ name: "虫草青花瓷" }); // 查询一条用户的所有数据,并且填充 books 属性 const user = await User.findOne({ name: "虫草青花瓷" }).populate("books"); // 查询一个用户的部分属性,并且排除 books 属性 const user = await User.findOne({ name: "虫草青花瓷" }).select("-books"); } test();
通过以上示例,我们可以看出 Mongoose 查询方法的使用方式,以及它们所接受的参数和返回结果格式。在实际使用中,我们可以根据自己的需求来选择使用合适的查询方法和返回方法,以提高查询效率和降低内存消耗。
总结
本文
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653d4c627d4982a6eb72ceb8