服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - MongoDB - MongoDB如何更新多级文档的数据

MongoDB如何更新多级文档的数据

2021-08-21 22:25岛上码农 MongoDB

MongoDB 这类文档型数据库与关系型数据库最大的差别就是所有数据是按文档存储的,因此更新时会涉及深层数据更新,例如更如何新某个对象的下级对象属性。本篇介绍如何更新多级文档的数据。

嵌套数组更新

以下面的数据(数据集名称为author)为例:

?
1
{name: '岛上码农', documents: ['Flutter入门与实战', '高性能MySQL', 'MongoDB专业指北']}

我们需要将 MongoDB专业指北改成MongoDB不专业指北,就属于修改嵌套的文档数据了。这个时候需要使用到 MongoDB 提供的定位操作符$。定位操作符即表示将对应条件匹配到的数据,如:

?
1
2
3
4
db.author.update(
  {name: '岛上码农', documents: 'MongoDB专业指北'},
  {'$set': {'documents.$': 'MongoDB不专业指北'}}
);

对于下级节点为数组的也是一样。

?
1
2
3
4
5
6
7
8
{
  name: '岛上码农',
  documents: [
    {name: 'Flutter入门与实战', score: 80},
    {name: '高性能MySQL', score: 90},
    {name: 'MongoDB专业指北', score: 85}
  ]
}

需要将 documengs 节点的 name 和 score 进行修改。

?
1
2
3
4
5
6
7
db.author.update(
  {name: '岛上码农', 'documents.name': 'MongoDB专业指北'},
  {'$set': {
        'documents.$.name': 'MongoDB不专业指北',
        'documents.$.score':88}
  }
);

$定位操作符即在查询条件中找到的数组中的数据元素位置,即表示操作的是该位置的数据。

更新下级文档的属性

更新下级文档属性时可以直接使用属性访问符“.”,例如下面需要更新 praise 增加到291。

?
1
2
3
4
5
6
7
8
{
  name: '岛上码农',
  scores: {
    view:  18800,
    praise: 290,
    followers: 105
    }
}
?
1
2
3
4
db.author.update(
  {name: '岛上码农'},
  {'$set': {'scores.praise': 291}}
);

下级文档若还存在嵌套数组也是类似的操作,如下面的数据,需要将“公众号”换成“微信公众号”:

?
1
2
3
4
5
6
7
8
9
{
  name: '岛上码农',
  scores: {
    view:  18800,
    praise: 290,
    followers: 105,
    platform: ['掘金', '公众号']
    }
}
?
1
2
3
4
db.author.update(
  {'name': '岛上码农', 'scores.platform': '公众号'},
  {'$set': {'scores.platform.$':'微信公众号'}}
);

属性增加和移除

MongoDB提供了 $push 和 $pull操作指令来增加或移除属性,同时还提供了 $pop 来移除数组的第一个或最后一个值。我们给前一个文档增加一个 homepage 属性。

?
1
2
3
4
db.author.update(
  {name: '岛上码农'},
  {$push: {homepage: 'https://juejin.cn/user/70787819648695'}}
);

注意的是,此时插入的是一个名为 homepage 的数组,其中的一个元素是:juejin.cn/user/707878…。如果是增加不是数组的属性,使用$set 指令即可。 可以使用 pull 移除掉匹配的一个属性。

?
1
2
3
4
db.author.update(
  {name: '岛上码农'},
  {$pull: {homepage: 'https://juejin.cn/user/70787819648695'}}
);

$pop 操作时使用数字-1和1表示移除首尾的元素,对于下面的数据,移除数组platform里的数据。

?
1
2
3
4
5
6
7
8
9
{
  name: '岛上码农',
    scores : {
        view: 18800,
        praise: 290,
        followers: 105,
        platform: ['掘金', '公众号', '其他1', '其他2']
    }
}
?
1
2
3
4
// 移除第一个元素
db.author.update({name: '岛上码农'}, {$pop: {'scores.platform': -1}});
// 移除最后一个元素
db.author.update({name: '岛上码农'}, {$pop: {'scores.platform': 1}});

总结

本篇介绍了 MongoDB 的嵌套属性更新操作,主要是定位操作符$的使用。通过定位符可以定位我们需要修改的数据位置,进而进行更新操作。以及属性的添加和移除,通过$push、$pull和$pop指令即可完成响应的操作。

以上就是MongoDB如何更新多级文档的数据的详细内容,更多关于MongoDB 更新多级文档的资料请关注服务器之家其它相关文章!

原文链接:https://juejin.cn/post/6975796730931445791

延伸 · 阅读

精彩推荐
  • MongoDBMongoDB系列教程(五):mongo语法和mysql语法对比学习

    MongoDB系列教程(五):mongo语法和mysql语法对比学习

    这篇文章主要介绍了MongoDB系列教程(五):mongo语法和mysql语法对比学习,本文对熟悉Mysql数据库的同学来说帮助很大,用对比的方式可以快速学习到MongoDB的命...

    MongoDB教程网3252020-05-01
  • MongoDBMongoDB多条件模糊查询示例代码

    MongoDB多条件模糊查询示例代码

    这篇文章主要给大家介绍了关于MongoDB多条件模糊查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MongoDB具有一定的参考学习价值...

    浅夏晴空5902020-05-25
  • MongoDBMongoDB的索引

    MongoDB的索引

    数据库中的索引就是用来提高查询操作的性能,但是会影响插入、更新和删除的效率,因为数据库不仅要执行这些操作,还要负责索引的更新 ...

    MongoDB教程网2532020-05-12
  • MongoDBmongodb数据库基础知识之连表查询

    mongodb数据库基础知识之连表查询

    这篇文章主要给大家介绍了关于mongodb数据库基础知识之连表查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mongodb具有一定的参...

    ZJW02155642020-05-22
  • MongoDBWindows下MongoDB配置用户权限实例

    Windows下MongoDB配置用户权限实例

    这篇文章主要介绍了Windows下MongoDB配置用户权限实例,本文实现需要输入用户名、密码才可以访问MongoDB数据库,需要的朋友可以参考下 ...

    MongoDB教程网3082020-04-29
  • MongoDBMongodb索引的优化

    Mongodb索引的优化

    MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。接下来通过本文给大家介绍Mongodb索引的优化,本文介绍的非常详细,具有参考借鉴价值,感...

    MRR3252020-05-05
  • MongoDB在mac系统下安装与配置mongoDB数据库

    在mac系统下安装与配置mongoDB数据库

    这篇文章主要介绍了在mac系统下安装与配置mongoDB数据库的操作步骤,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    CXYhh1219312021-11-14
  • MongoDBMongoDB查询之高级操作详解(多条件查询、正则匹配查询等)

    MongoDB查询之高级操作详解(多条件查询、正则匹配查询等)

    这篇文章主要给大家介绍了关于MongoDB查询之高级操作(多条件查询、正则匹配查询等)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者...

    w田翔3872020-12-19