MongoDB 简介 - 编辑记录
开始设置
请阅读本系列的第一本指南,了解有关 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是一个新术语,它是update和insert的组合。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" : [ ],
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~