📜  mongoose get raw - Javascript (1)

📅  最后修改于: 2023-12-03 15:03:02.371000             🧑  作者: Mango

使用 Mongoose 获取原始数据

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 对象。例如,以下代码将仅检索每个文档的 nameemail 字段:

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 集合方法来执行。