如何在MongoDB中创建、检索、更新和删除记录

来自菜鸟教程
跳转至:导航、​搜索

介绍

MongoDB 是现代 Web 应用程序中常用的免费开源 NoSQL 文档数据库。 在这个简短的教程中,您将探索如何在 MongoDB 中处理数据。 您将创建、检索、更新和删除记录。

先决条件

要完成本教程,您需要安装 MongoDB,您可以按照 如何在 Ubuntu 18.04 上安装 MongoDB。

创建数据库

在运行 MongoDB 的服务器上,键入 mongo 以打开与数据库的连接:

mongo

看到 > 符号后,您就可以创建第一个数据库并开始添加记录了。

让我们创建一个个人数据库来存储有关用户的一些数据。

我们的第一个命令 use userdb 创建了一个名为“userdb”的新数据库,您可以将任何您想要的名称放在 use <databasename> 格式中。

use userdb

您可以使用 db 命令验证您当前使用的数据库,在我们的例子中返回“userdb”:

db
Outputuserdb

现在您的数据库已经创建,您可以创建一些 JSON 结构的文档来将数据存储在您的数据库中。

执行以下命令将一些数据插入数据库:

db.people.insert({ name: "Andrew", age: 33, hobbies: ["Coding", "Gaming", "Cooking"], hungry: false})

您将收到 WriteResult 通知,告知您插入成功:

OutputWriteResult({ "nInserted" : 1 })

您可以使用多种数据类型,包括字符串、数字、数组和布尔值。 Key 不需要双引号。

检索数据

一旦您的集合中有数据,您就可以开始使用 .find(<parameters>) 搜索和过滤该数据

要验证您的数据是否已添加到“人员”文档,请使用 find() 语法。 在 MongoDB 控制台中执行此命令:

db.people.find()

此命令显示当前与“人员”文档关联的所有数据。

Output{ "_id" : ObjectId("5c08c98f3d828385a2162d94"), "name" : "Andrew", "age" : 33, "hobbies" : [ "Coding", "Gaming", "Cooking" ], "hungry" : false }

如果要将其转换为漂亮的 JSON 格式,请在 .find() 之后使用 .pretty()

db.people.find().pretty()
Output{
        "_id" : ObjectId("5c08c98f3d828385a2162d94"),
        "name" : "Andrew",
        "age" : 33,
        "hobbies" : [
                "Coding",
                "Gaming",
                "Cooking"
        ],
        "hungry" : false
}

当您添加新记录时,该 Mongo 将自动创建一个 _id 键供您以后参考。

尝试添加更多数据,然后我们将着手修改和搜索数据。

db.people.insert({ name: "Riley", age: 3, hobbies: ["Sleeping", "Barking", "Snuggles"], hungry: true})
db.people.insert({ name: "You", age: 30, hobbies: ["Coding", "Reading DigitalOcean Articles", "Creating Droplets"], hungry: true})

例如,如果我只想查找那些饥饿的人的记录:

db.people.find({ hungry: true }).pretty()
Output{
        "_id" : ObjectId("5c08cbea3d828385a2162d95"),
        "name" : "Riley",
        "age" : 3,
        "hobbies" : [
                "Sleeping",
                "Barking",
                "Snuggles"
        ],
        "hungry" : true
}
{
        "_id" : ObjectId("5c08cc2e3d828385a2162d96"),
        "name" : "You",
        "age" : 30,
        "hobbies" : [
                "Coding",
                "Reading DigitalOcean Articles",
                "Creating Droplets"
        ],
        "hungry" : true
}

或按特定爱好:

db.people.find({ hobbies: "Coding" }).pretty()
Output{
        "_id" : ObjectId("5c08c98f3d828385a2162d94"),
        "name" : "Andrew",
        "age" : 33,
        "hobbies" : [
                "Coding",
                "Gaming",
                "Cooking"
        ],
        "hungry" : false
}
{
        "_id" : ObjectId("5c08cc2e3d828385a2162d96"),
        "name" : "You",
        "age" : 30,
        "hobbies" : [
                "Coding",
                "Reading DigitalOcean Articles",
                "Creating Droplets"
        ],
        "hungry" : true
}

更新数据

要修改数据,请使用 .update() 函数。 但首先让我们看看我们的数据,看看我们想要改变什么:

db.people.find().pretty()
Output{
        "_id" : ObjectId("5c08c98f3d828385a2162d94"),
        "name" : "Andrew",
        "age" : 33,
        "hobbies" : [
                "Coding",
                "Gaming",
                "Cooking"
        ],
        "hungry" : false
}
{
        "_id" : ObjectId("5c08cbea3d828385a2162d95"),
        "name" : "Riley",
        "age" : 3,
        "hobbies" : [
                "Sleeping",
                "Barking",
                "Snuggles"
        ],
        "hungry" : true
}
{
        "_id" : ObjectId("5c08cc2e3d828385a2162d96"),
        "name" : "You",
        "age" : 30,
        "hobbies" : [
                "Coding",
                "Reading DigitalOcean Articles",
                "Creating Droplets"
        ],
        "hungry" : true
}

像这样修改第三条记录的名称:

db.people.update({ name: "You" }, {$set: { name: "Sammy" }})

语句的第一部分指定要搜索的更新内容,第二部分是要设置的新值。 您会注意到使用此命令,有 1 条记录匹配,并修改了 1 条记录:

OutputWriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

如果我们现在用我们新设置的名称检查该记录:

db.people.find({ name: "Sammy" }).pretty()
Output{
        "_id" : ObjectId("5c08cc2e3d828385a2162d96"),
        "name" : "Sammy",
        "age" : 30,
        "hobbies" : [
                "Coding",
                "Reading DigitalOcean Articles",
                "Creating Droplets"
        ],
        "hungry" : true
}

name 键值已设置为其新值 Sammy

您还可以使用 $push 而不是 $set 将新爱好推送到数组中:

db.people.update({ name: "Sammy" }, {$push: { hobbies: "Typing furiously" }})
db.people.find({ name: "Sammy" }).pretty()
Output{
        "_id" : ObjectId("5c08cc2e3d828385a2162d96"),
        "name" : "Sammy",
        "age" : 30,
        "hobbies" : [
                "Coding",
                "Reading DigitalOcean Articles",
                "Creating Droplets",
                "Typing furiously"
        ],
        "hungry" : true
}

现在让我们看看删除数据。

删除数据 (D)

使用 .remove() 功能删除数据。 您可以通过多种方式删除数据,但最安全的方法是使用唯一的 _id 找到要删除的记录,例如,您有多个 "Sammy" 条目,删除name: "Sammy" 将删除所有这些。 让我们试试这个:

db.people.remove({ _id: ObjectId("5c08cc2e3d828385a2162d96")})
OutputWriteResult({ "nRemoved" : 1 })
db.people.find().pretty()
Output{
        "_id" : ObjectId("5c08c98f3d828385a2162d94"),
        "name" : "Andrew",
        "age" : 33,
        "hobbies" : [
                "Coding",
                "Gaming",
                "Cooking"
        ],
        "hungry" : false
}
{
        "_id" : ObjectId("5c08cbea3d828385a2162d95"),
        "name" : "Riley",
        "age" : 3,
        "hobbies" : [
                "Sleeping",
                "Barking",
                "Snuggles"
        ],
        "hungry" : true
}

"Sammy" 条目已被安全删除,不会影响任何其他可能存在的 "Sammy" 记录(如果它们存在的话)。 尝试对此进行试验,看看您还能做什么。

结论

阅读本文后,您现在对如何在 MongoDB 数据库中创建、检索、更新和删除记录有了基本的了解。