Mongoose 使用save()方法更新文档

Mongoose 使用save()方法更新文档

mongoose模型的一个重要方面是在对其进行更改时显式保存文档。这是通过使用save()方法来实现的。在本文中,我们将看到它的用途,并了解在保存文档时应注意的事项。

我们将借助一个示例来理解save()方法的操作。

步骤1:创建一个模型:

在VS Code中打开一个空文件夹,并创建一个名为app.js的文件。现在,在终端中写入以下命令,将此文件夹初始化为NodeJS项目。

npm init -y
JavaScript

现在,将以下命令写入以从NPM仓库下载MongoDB和mongoose包。

npm install mongodb mongoose
JavaScript

现在,我们需要做的下一件事是将 mongoose 库导入到我们的文件中,并将其分配给一个常量,并在该常量上调用 connect 方法来连接到MongoDB数据库。我们是连接到一个本地数据库,您也可以连接到云数据库,但它必须是MongoDB数据库。将URL字符串准确地传递给 connect 方法(用于本地数据库),您可以根据自己的喜好更改数据库的名称。

在mongoose中,首先需要创建一个蓝图,从该蓝图创建集合(或模型)和它们的文档。该蓝图被称为 schema 。我们调用 Schema 方法并传递一个对象,其中键是我们希望在每个文档上拥有的字段,它们各自的值是这些键的数据类型。我们也将其分配给一个常量。

接下来,我们在 mongoose 对象上调用model方法,并传递一个字符串,该字符串是我们集合的名称,以及保存schema的常量。字符串中定义的名称必须是标题大小写和单数形式,mongoose将自动将其转换为小写和复数形式。这将在我们的heroesDB数据库上创建一个模型/集合。尽管目前它是空的,因为我们还没有为其创建任何文档。

// Importing mongoose library and connecting to a MongoDB database
const mongoose = require("mongoose")
mongoose.connect("mongodb://localhost:27017/heroesDB");
 
// Creating a blueprint of each of our document
let heroSchema = mongoose.Schema({
    name: {
        type: String,
        require: true
    },
    power: {
        type: String,
        require: true
    },
    rank: String
})
 
// Creating a collection/model to hold all these documents
let Hero = mongoose.model("Hero", heroSchema)
JavaScript

步骤2:创建一些文档:

上述模型方法给我们提供了一个类,我们可以从中创建对象,这些对象将被作为我们使用的类所代表的集合的文档化。我们使用下面所示的语法从中创建两个对象。然后对每个对象调用 save() 方法,以使其实际创建并存储在 heroes 集合中,

// Creating a collection/model to hold all these documents
const Hero = mongoose.model("Hero", heroSchema)
 
// Creating some heroes/documents for our heroes collection
let hellfire = new Hero({
    name: 'HellFire',
    power: "Manipulate Fire Element",
    rank: "Unknown"
})
hellfire.save()
 
let snowflake = new Hero({
    name: "Snowflake",
    power: "Ice Magic",
    rank: "S"
})
snowflake.save();
JavaScript

在写完上述代码后,在终端中运行以下命令,以运行您的应用程序并查看更改的发生。

node app.js
JavaScript

现在,打开 Studio 3T 或您正在使用的 DB viewer,并转到 heroesDB 数据库,在其下面,打开 collections,然后双击 heros 集合查看它。现在您可以看到创建的两个文档。右键单击第一个文档,选择 查看文档 ,然后复制其 _id。

Mongoose 使用save()方法更新文档

步骤3:用新数据更新文档:

在上述步骤中复制的_id将在这里使用。在 Hero 类上调用 findById() 方法,将复制的_id作为参数传递给它。这将返回一个promise,因此我们在其上调用 then() 方法,在其内部有我们的hero对象。访问你想要改变的该对象的属性,将它们赋值为新的值,并确保使用相同的数据类型。完成后,在该对象上调用 save() 方法。在运行应用程序之前,注释掉创建新文档的代码,否则会导致重复创建文档。

// Importing mongoose library and connecting to a MongoDB database
const mongoose = require("mongoose")
mongoose.connect("mongodb://localhost:27017/heroesDB");
 
// Creating a blueprint of each of our document
let heroSchema = mongoose.Schema({
    name: {
        type: String,
        require: true
    },
    power: {
        type: String,
        require: true
    },
    rank: String
})
 
// Creating a collection/model to hold all these documents
let Hero = mongoose.model("Hero", heroSchema)
 
// Updating values of a document
Hero.findById("6396a91c028f4ad3aa1631e9").then((hero)=>{
    hero.rank = "A";
    hero.save();
});
JavaScript

现在运行以下命令来运行应用程序:

node app.js
JavaScript

右键单击 英雄 收藏夹,然后选择刷新。现在,如果你双击打开这个收藏夹,你会看到属性已经被更改。

Mongoose 使用save()方法更新文档

需要记住的事项: 请记住, save() 方法返回一个promise。因此,如果在保存更新后的文档之后要执行一些操作,比如在控制台上记录一些内容、创建一个新对象、重定向到一个新的网页等等,确保将这些操作放在链接到 save() 方法的 then() 块中,以保证按顺序执行需要按顺序发生的事情。

// Updating values of a document
Hero.findById("6396a91c028f4ad3aa1631e9").then((hero) => {
    hero.rank = "A"
    hero.save().then(()=>{
        console.log("HellFire was Updated")
    })
})
JavaScript

完整代码:

// Importing mongoose library and connecting to a MongoDB database
const mongoose = require("mongoose")
mongoose.connect("mongodb://localhost:27017/heroesDB");
 
// Creating a blueprint of each of our document
let heroSchema = mongoose.Schema({
    name: {
        type: String,
        require: true
    },
    power: {
        type: String,
        require: true
    },
    rank: String
})
 
// creating a collection/model to hold all these documents
let Hero = mongoose.model("Hero", heroSchema)
 
// Creating some heroes/documents for our heroes collection
let hellfire = new Hero({
    name: 'HellFire',
    power: "Manipulate Fire Element",
    rank: "Unknown"
})
hellfire.save()
 
let snowflake = new Hero({
    name: "Snowflake",
    power: "Ice Magic",
    rank: "S"
})
snowflake.save()
 
// Updating values of a document
Hero.findById("6396a91c028f4ad3aa1631e9").then((hero) => {
    hero.rank = "A"
    hero.save().then(() => {
        console.log("HellFire was Updated")
    })
});
JavaScript

输出:

Mongoose 使用save()方法更新文档

参考: https://mongoosejs.com/docs/documents.html#updating-using-save

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册