📅  最后修改于: 2023-12-03 15:03:02.371000             🧑  作者: Mango
Mongoose 是一种流行的 Node.js MongoDB ODM(对象文档映射)库,它允许程序员使用 Node.js 操作 MongoDB 数据库。
但是,有时您可能需要从 MongoDB 检索原始数据而不是使用 Mongoose 模型。这可能是因为您需要对数据进行复杂的聚合或分组,而这些操作可能无法使用 Mongoose 的集合方法来执行。
在本文中,我们将介绍如何使用 Mongoose 查询原始数据。
在本教程中,我们将使用如下程序在 MongoDB 中插入一些演示数据:
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/mydb', {
useNewUrlParser: true,
useUnifiedTopology: true,
});
const UserSchema = new mongoose.Schema({
name: String,
age: Number,
email: String,
});
const User = mongoose.model('User', UserSchema);
const users = [
{ name: 'Alice', age: 25, email: 'alice@example.com' },
{ name: 'Bob', age: 30, email: 'bob@example.com' },
{ name: 'Charlie', age: 35, email: 'charlie@example.com' },
];
User.insertMany(users);
要在 Mongoose 中检索原始文档,您需要使用 collection
属性获取 MongoDB 集合实例。可以使用 mongoose.connection
获取已连接的 MongoDB 数据库。
const db = mongoose.connection;
const collection = db.collection('users');
有了 MongoDB 集合实例,您可以使用其 find()
方法来检索原始文档。以下是一个示例:
collection.find({}).toArray((err, data) => {
if (err) {
console.log(err);
} else {
console.log(data);
}
db.close();
});
在这个示例中,我们使用 find()
方法检索所有文档,并将结果作为数组传递给 toArray()
方法。当可用时,Mongoose 将自动将检索到的文档转换为 Mongoose 模型实例。
如果您要加入查询条件,可以向 find()
方法传递一个查询对象。例如,以下代码将检索 name
属性等于 "Alice"
的所有文档:
collection.find({ name: 'Alice' }).toArray((err, data) => {
if (err) {
console.log(err);
} else {
console.log(data);
}
db.close();
});
默认情况下,Mongoose 会检索每个文档中的所有字段。但是,您可以使用 MongoDB 的 projection
特性来指定要检索的字段。
在 Mongoose 中,您可以使用 find()
方法的第二个参数来指定 projection
对象。例如,以下代码将仅检索每个文档的 name
和 email
字段:
collection.find({}, { name: 1, email: 1 }).toArray((err, data) => {
if (err) {
console.log(err);
} else {
console.log(data);
}
db.close();
});
在这个示例中,我们将一个 projection
对象传递给 find()
方法的第二个参数。该对象仅包含要检索的字段及其对应值,其中 1
表示应检索该字段。
在本文中,我们介绍了如何在 Mongoose 中使用 MongoDB 集合实例来检索原始文档。这对于需要执行复杂的聚合或分组操作的应用程序非常有用,而这些操作可能无法使用 Mongoose 集合方法来执行。