MongoDB 简介 - 编辑记录

发布日期:2026-06-25 06:08:02   来源 : 杭州电子商务研究院    浏览量 :15
杭州电子商务研究院 发布日期:2026-06-25 06:08:02  
15

开始设置

请阅读本系列的第一本指南,了解有关 MongoDB安装、Shell 和数据库管理的更多信息。

删除字段

您可以从单个记录中删除所有或部分字段。这就是 NoSQL 的工作方式。为此,我们将使用一个名为$unset的函数,它与我们之前看到的$set相反。

这个语法相当棘手。您需要将整个对象作为第二个参数传递。例如,假设我现在不需要那个points字段。相反,我想从我的记录中删除points类别。使用 NoSQL,我只需执行以下命令:

      db.students.update(
  {
    name: "Praveen Kumar"
  },
  {
    $unset: {
      points: ""
    }
  }
);
    

在这里,你可以看到它遵循与$inc$set类似的结构。唯一的不同是你可以为字段提供任何值。提供""75即可。执行此操作后,我们得到以下输出:

      > db.students.update({
...   "name": "Praveen Kumar"
... }, {
...   $unset: {
...     "points" : ""
...   }
... });
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.students.find({"phone": "9840035007"}).pretty();
{
    "_id" : ObjectId("592ebe7e8e61243307417cc4"),
    "name" : "Praveen Kumar",
    "degree" : "Cloud Computing MSc",
    "email" : "praveen@example.com",
    "subjects" : [
        {
            "name" : "Internet Networks",
            "prof" : "Prof. Awesome Blossom"
        },
        {
            "name" : "Cloud Computing",
            "prof" : "Prof. Tech Ninja"
        },
        {
            "name" : "Web Development",
            "prof" : "Prof. Chunky Monkey"
        }
    ],
    "phone" : [
        "9840035007",
        "9967728336",
        "7772844242"
    ]
}
>
    

好耶!我们从我的记录中删掉了分数。

上插入

Upsert是一个新术语,它是updateinsert的组合。Upserting 类似于说“如果记录存在,则更新它,否则,插入它”。当您尝试在数据库中查找匹配项但找不到时,就会发生 upsertion,然后插入一个值而不是简单地返回。让我们考虑同样的例子,我们有三条记录,我们将尝试更新一条不存在的记录,比如学生“Baahubali”。

      db.students.update(
  {
    name: "Baahubali"
  },
  {
    name: "Baahubali",
    degree: "Hill Climbing",
    email: "baahu@mahishmati.com"
  }
);
    

如果我们继续运行上述命令,我们会得到:

      > db.students.update({
...   "name": "Baahubali"
... }, {
...   "name": "Baahubali",
...   "degree" : "Hill Climbing",
...   "email" : "baahu@mahishmati.com"
... });
WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0 })
>
    

结果全部为 0。执行简单的find()将得到与之前相同的结果。如果我们想让数据库检查是否未找到匹配项,然后将其插入,我们需要使用名为upsert 的选项。现在让我们使用相同的查询并对其进行小幅更改。让我们为update()函数添加第三个参数,指定一个仅将upsert设置为true 的对象

      db.students.update(
  {
    name: "Baahubali"
  },
  {
    name: "Baahubali",
    degree: "Hill Climbing",
    email: "baahu@mahishmati.com"
  },
  {
    upsert: true
  }
);
    

执行上述命令,我们得到以下内容:

      > db.students.update({
...   "name": "Baahubali"
... }, {
...   "name": "Baahubali",
...   "degree" : "Hill Climbing",
...   "email" : "baahu@mahishmati.com"
... }, {
...   "upsert": true
... });
WriteResult({
    "nMatched" : 0,
    "nUpserted" : 1,
    "nModified" : 0,
    "_id" : ObjectId("592ffa57962222f55cf0a823")
})
>
    

通过将upsert参数设置为true,我们可以看到插入了一条记录(实际上是更新了),并返回了_id。这类似于对设置了AUTO_INCREMENT的表执行 MySQL 插入查询。现在让我们通过执行find()来查看数据库中有什么

      > db.students.find().pretty();
{
    "_id" : ObjectId("592ebe7e8e61243307417cc4"),
    "name" : "Praveen Kumar",
    "degree" : "Cloud Computing MSc",
    "email" : "praveen@example.com",
    "subjects" : [
        {
            "name" : "Internet Networks",
            "prof" : "Prof. Awesome Blossom"
        },
        {
            "name" : "Cloud Computing",
            "prof" : "Prof. Tech Ninja"
        },
        {
            "name" : "Web Development",
            "prof" : "Prof. Chunky Monkey"
        }
    ],
    "phone" : [
        "9840035007",
        "9967728336",
        "7772844242"
    ]
}
{
    "_id" : ObjectId("592ed5818e61243307417cc5"),
    "name" : "Purushothaman",
    "degree" : "Management",
    "email" : "purush@example.com"
}
{
    "_id" : ObjectId("592ed5818e61243307417cc6"),
    "name" : "Meaow Meaow",
    "degree" : "Cat Study",
    "email" : "meaow@example.com",
    "phone" : [
        "9850420420"
    ]
}
{
    "_id" : ObjectId("592ffa57962222f55cf0a823"),
    "name" : "Baahubali",
    "degree" : "Hill Climbing",
    "email" : "baahu@mahishmati.com"
}
>
    

耶!现在Baahubali在我们的学生名单中了。(现在让我们去寻找 Kalakeya!😁)

显然,upsert 是一个有用的功能,可以节省相当多的错误处理和时间。

重命名字段

我们的学生是 Baahubali,但是等一下。在 Mahishmati 时代,他们没有电子邮件,对吧?让我们用pigeon替换他的电子邮件字段。我们有一个在 MongoDB 中重命名事物的快速方法。正如您所猜测的,运算符是$rename。此函数的语法也类似于我们的$set函数,因此要重命名,它将是:

      db.students.update(
  {
    name: "Baahubali"
  },
  {
    $rename: {
      email: "pigeon"
    }
  }
);
    

现在,当我们执行上述命令并执行 find ()并查看结果时,我们得到:

      > db.students.update({
...   "name": "Baahubali"
... }, {
...   $rename: {
...     "email" : "pigeon"
...   }
... });
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.students.find({"name": "Baahubali"}).pretty();
{
    "_id" : ObjectId("592ffa57962222f55cf0a823"),
    "name" : "Baahubali",
    "degree" : "Hill Climbing",
    "pigeon" : "baahu@mahishmati.com"
}
>
    

啊!我喜欢这个鸽子的东西。我们已经匹配并修改了一条记录。现在我们已成功将Baahubali 的电子邮件更改鸽子

PETA 注:撰写本文时没有鸽子受到伤害。

删除记录

我们正处于 CRUD(创建、检索、更新、删除)操作的最后部分。在进行删除操作之前,请确保您理解了其他每个字母。

删除记录或移除文档也更容易。我们将使用remove()函数执行移除操作。该函数类似于update() ,但除了选项(可选)和justOne (我们稍后会讨论)之外,它不接受任何其他参数。在尝试删除任何学生之前,让我们尝试添加一条哑记录。

      > db.students.insert([{"name": "Bleh"}, {"name": "Bleh"}, {"name": "Blah"}]);
BulkWriteResult({
    "writeErrors" : [ ],
    "writeConcernErrors" : [ ],
    
以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据