快捷搜索:

您的位置:澳门新葡4473网站 > 项目 > MongoDB 4.2 正式发布 引入分布式事务

MongoDB 4.2 正式发布 引入分布式事务

发布时间:2020-04-06 18:51编辑:项目浏览(179)

    澳门新葡4473网站 1

    MongoDB - 简介

    官网:

    MongoDB 是四个依照布满式文件存款和储蓄的数据库,由 C++ 语言编写,意在为 WEB 应用提供可增添的高质量数据存款和储蓄应用方案。

    MongoDB 是八个留意关周到据库和非关周详据库之间的制品,是非关周到据库此中效能最丰盛,最像关周密据库的。

     

     

     

    • 布满式事务将 MongoDB 的多文书档案 ACID 从别本集扩充到分享集群,可感到越来越宽泛的用例服务

    • 按需物化视图应用新的 $Merge 运算符,在群集中缓存大型聚合的输出是一种不足为道的情势,新的 $Merge 运算符将能够使得地换代这一个结果,并非一心重复总括它们

    • 通配符索引使建立模型像付加物目录那样的冲天异构的聚众变得轻易和自然,而不捐躯对索引的支撑。只需定义一个过滤器,它将活动索引会集中具备相称的字段、子文书档案和数组

    • MongoDB 查询语言巩固效用,如更有表现力的创新、新的数学生运动算符和扩展的 regex 匡助。此版本的 update 和 findAndModify 命令能够援用现成字段,并参预聚合管道,以博取越来越强的表现力

    • 可还原读写,裁减了编写制定管理临时集群故障的代码的复杂

    MongoDB - 安装及运转

    1. 下载

    07/05/2017 Current Stable Release (3.4.6)

    1. 创办数量目录

    MongoDB 将数据目录存款和储蓄在 db 目录下,需手动创制。

    1
    E:MongoDBdatadb
    1. 运行 MongoDB 服务器

    为了从命令提醒符下运维MongoDB服务器,你一定要从MongoDBbin目录中施行mongod.exe文本,不要关闭服务。ctrl + c关闭。

    1
    mongod.exe --dbpath E:MongoDBdatadb
    1. MongoDB 后台管理

    运行 mongo.exe

    MongoDB Shell是MongoDB自带的交互作用式Javascript shell,用来对MongoDB举行操作和保管的人机联作式碰着。

    1. 将 MongoDB 服务器作为 Windows 服务运营

    加多系统意况 path E:MongoDBServer3.4bin

    检测:cmd 中输入 mongod --help

    新建文件:E:MongoDBlogslogs.log

    将 MongoDB 服务器作为 Windows 服务随 Windows 运营而开启:

    1
    mongod.exe --logpath "E:MongoDBlogslogs.log" --logappend --dbpath "E:MongoDBdata" --directoryperdb --serviceName MongoDB --install

    开启 MongoDB 服务:net start MongoDB

    停止 MongoDB 服务:net stop MongoDB

    删除 MongoDB 服务:sc delete MongoDB

    接下去就足以在 cmd 中运作 E:MongoDBServer3.4bin 里面的 *.exe 程序了

    • shell 控制台 mongo
    • 数据库的还原 mongorestore
    • 备份 mongodump
    1. mongodb 运行的参数

     

    澳门新葡4473网站 2

     

    客商端字段级加密(FLE,Client-side Field Level Encryption卡塔尔(قطر‎现已经是 MongoDB 4.2 的一局部,能够在 beta 版中接受。使用 FLE,能够选用性地维护文书档案中的敏感字段,每一个字段都利用自身的密钥加密,并在客商端上无缝解密。

    mongoDB - 主要特征

    • MongoDB安装简便。
    • MongoDB的提供了二个面向文书档案存储,未有表构造的定义,每一日记下能够有一同两样的布局,操作起来比较轻便和易于。
    • 一心的目录协助(单键索引、数组索引、全文索引、地理地方索引 等)
    • 您能够通过本地恐怕互联网创设数量镜像,那使得MongoDB有越来越强的扩展性。
    • 澳门新葡4473网站,一旦负载的增添(必要更加多的蕴藏空间和越来越强的拍卖本事) ,它能够分布在微机网络中的别的节点上那便是所谓的分片。
    • Mongo扶持加多的查询表明式。查询指令使用JSON格局的标识,可随机查询文书档案中内嵌的对象及数组。
    • MongoDb 使用update(卡塔尔国命令能够完结替换实现的文书档案(数据)可能局地钦定的多寡字段 。
    • Mongodb中的Map/reduce首若是用来对数码开展批量拍卖和聚焦操作。
    • Map和Reduce。Map函数调用emit(key,valueState of Qatar遍历集结中兼有的笔录,将key与value传给Reduce函数举办拍卖。
    • Map函数和Reduce函数是选取Javascript编写的,并能够通过db.runCommand或mapreduce命令来进行MapReduce操作。
    • GridFS是MongoDB中的一个放手功效,能够用于寄放多量小文件。
    • MongoDB允许在服务端试行脚本,能够用Javascript编写有个别函数,直接在服务端实施,也得以把函数的定义存款和储蓄在服务端,下一次平素调用就能够。
    • MongoDB 支持两种编制程序语言:C C++ C# .NET Erlang Haskell Java JavaScript Lisp node.JS Perl PHP Python Ruby Scala 等

    MongoDB 是今世应用程序的通用数据库,它聚集了文书档案模型、智能遍及式系统以致在别的市方运作它的力量,从台式机计算机到大型机,在公私和私有云中运维。假设以 MongoDB 4.2 为例,最快和最简单易行的主意是在 MongoDB Atlas 上启动二个集群,在 AWS、Azure 和 GCP 上的 60 多个区域都得以应用。

    mongoDB - 工具

    监控

    • Munin:互连网和系统监察和控制工具
    • Gangila:网络和系统监察和控制工具
    • Cacti:用于查看CPU负载, 网络带宽利用率,它也提供了一个用到于监控MongoDB 的插件。

    GUI

    • Robomongo(Robo 3T)
    • Fang of Mongo – 网页式,由Django和jQuery所构成。
    • Futon4Mongo – 一个CouchDB Futon web的mongodb山寨版。
    • Mongo3 – Ruby写成。
    • MongoHub – 适用于OSX的应用程序。
    • Opricot – 叁个基于浏览器的MongoDB调整台, 由PHP撰写而成。
    • Database Master — Windows的mongodb管理工科具
    • RockMongo — 最佳的PHP语言的MongoDB管理工具,轻量级, 扶助多国语言.

    要么能够在友好的根底设备上下载并运维 4.2。通过 MongoDB Enterprise Operator for Kubernetes,你能够让 Kubernetes 陈设和管理 MongoDB。

    mongoDB - 三大器重概念

     

    澳门新葡4473网站 3

     

    详细情形见发布表达:

    1. database 数据库

    三个聚众逻辑上集体在一同,正是数据库。

    数据库命名标准:

    • 无法是空字符串(””卡塔尔国。
    • 不可含有’ ‘(空格State of Qatar、.、$、/、和 (空字符)。
    • 应总体大写。
    • 最多64字节。

    有局地数据库名是保留的,可以直接访问这个有特殊效率的数据库。

    • admin: 从权力的角度来看,那是”root”数据库。假使将三个客商拉长到这些数据库,那么些客户自动三番一次全数数据库的权杖。一些一定的劳务器端命令也不能不从这一个数据库运营,例如列出全体的数据库也许关闭服务器。
    • local: 那些数目永恒不会被复制,能够用来积攒限于本地单台服务器的轻便会集
    • config: 当Mongo用于分片设置时,config数据库在中间采取,用于保存分片的连带音讯。

    2. collection 集合

    七个文书档案组成叁个凑合,相当于关周到据库的表。

    抱有存款和储蓄在汇集中的数据都以 BSON 格式,BSON 是类 JSON 的一种二进制情势的囤积格式,简单称谓 Binary JSON。

    群集名命名标准:

    • 集合名无法是空字符串””。
    • 集结名不能够含有字符(空字符State of Qatar,那一个字符表示集合名的尾声。
    • 集结名无法以”system.”起先,那是为系统群集保留的前缀。
    • 客户创立的聚焦名字不能够含有保留字符。有些驱动程序的确协助在会集名里面含有,那是因为一些系统生成的联谊中隐含该字符。除非您要拜候这种系统创设的聚众,不然千万不要在名字里冒出$。 

    澳门新葡4473网站 4

    (文/开源中国卡塔尔国    

    3. document 文档

    MongoDB 将数据存款和储蓄为五个文书档案,数据结构由键值对组合。

    MongoDB 文书档案是一组键值对(即BSON,二进制的 JSON卡塔尔国,相符于 JSON 对象。字段值可以分包别的文书档案,数组及文书档案数组。

    文书档案键命名标准:

    • 键无法含有 (空字符卡塔尔(قطر‎。那个字符用来表示键的尾声。
    • .和$有非常的含义,独有在特定景况下技艺使用。
    • 以下划线”_”起始的键是保留的(不是严刻须要的State of Qatar。

    内需小心的是:

    • 文书档案中的键值对是不改变的。
    • 文书档案中的值既可以够是在双引号里面包车型客车字符串,还可以是别的二种数据类型(以至足以是全部嵌入的文书档案卡塔尔(قطر‎。
    • MongoDB区分类型和尺寸写。
    • MongoDB的文书档案不能有重复的键。
    • 文书档案的键是字符串。除了少数例外情况,键还可以大肆UTF-8字符。

     

    image

    MongoDB - 数据类型

    ObjectId:主键,一种特殊并且十二分首要的体系,每种文书档案都会私下认可配置这一个性情,属性名字为_id,除非本身定义,方可覆盖

     

    澳门新葡4473网站 5

     

    MongoDB - 司空眼惯操作

    查看当前数据库

    1
    db

    翻开全部数据库

    向来十分的少少的数据库不予展现

    MongoDB 中默许的数据库为 test,假诺您从未创立新的数据库,集结将寄放在在 test 数据库中。

    1
    show dbs

    连接到钦赐的数据库

    假诺数据库不设有,则创立数据库,不然切换来钦点数据库。

    1
    use db_name

    翻开服务器状态

    1
    db.serverStatus()

    查阅数据库总结音讯

    1
    db.stats()

    去除数据库

    1
    db.dropDatabase()

    翻看数据库中具备集结

    1
    2
    3
    show tables
    show collections

    清空集结

    去除里面包车型大巴文档,但集结还在

    1
    db.col_name.remove({})

    删除集合

    1
    db.col_name.drop()

    翻看群集详细新闻

    MongoDB 的3.0后的版本分了两种格局queryPlanner、executionStats、allPlansExecution

    1
    db.col_name.find({key:value}).explain("allPlansExecution")

    MongoDB - 增加和删除改查

    插入

    MongoDB 使用 insert(State of Qatar 或 save(卡塔尔(قطر‎ 方法向聚聚集插入文书档案:

    只要该集结不在该数据库中, MongoDB 会自动创造该集合併插入文书档案。

    insert(卡塔尔 或 save(State of Qatar 方法都足以向collection里插入数据,两个分别:

    • 假定不钦赐 _id 字段,save() 方法就好像于 insert(卡塔尔(قطر‎ 方法。假若钦定 _id 字段,则会更新该 _id 的数据。
    • 使用save函数,假如原来的对象不设有,那她们都能够向collection里插入数据,借使已经存在,save会调用update更新里面包车型地铁笔录,而insert则会忽略操作
    • insert能够一回性插入八个列表,而不用遍历,效用高, save则须要遍历列表,几个个布置。
    1
    2
    3
    db.col_name.insert(document)
     
    db.col_name.save(document)

    插入二个文书档案到 col 集结中:

    1
    2
    3
    4
    5
    6
    7
    8
    db.col_1.insert({
    title: 'MongoDB 教程',
    description: 'MongoDB 是一个 Nosql 数据库',
    by: '菜鸟教程',
    url: 'http://www.runoob.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
    })

    也足以将文书档案数据定义为一个变量,如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    document = ({
    title: 'MongoDB 教程',
    description: 'MongoDB 是一个 Nosql 数据库',
    by: '菜鸟教程',
    url: 'http://www.runoob.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
    });
     
    db.col_2.insert(document)

    删除

    remove(State of Qatar 函数是用来删除集结中的数据

    在举办 remove(State of Qatar 函数前先实行 find(卡塔尔(قطر‎命令来剖断推行的口径是或不是准确,那是二个相比较好的习贯。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    db.col_name.remove(
    <query>,
    {
    justOne: <boolean>,
    writeConcern: <document>
    }
    )
     
    - query :(可选)删除的文档的条件。
    - justOne : (可选)如果设为 true 或 1,则只删除一个文档。
    - writeConcern :(可选)抛出异常的级别。

    去除集合中兼有文档

    1
    db.col.remove({})

    移除 col_1 集结中 title 为 MongoDB save 的文书档案,只删除第一条找到的笔录

    1
    db.col_1.remove({'title':'MongoDB save'}, 1)

    更新

    MongoDB 使用 update(卡塔尔 和 save(卡塔尔(قطر‎ 方法来更新集结中的文书档案

    update() 方法用于立异已存在的文书档案

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    db.col_name.update(
    <query>,
    <update>,
    {
    upsert: <boolean>,
    multi: <boolean>,
    writeConcern: <document>
    }
    )
     
    - query : update 的查询条件,类似sql update查询内where后面的。
    - update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
    - upsert : 可选,这个参数的意思是,如果不存在 update 的记录,是否插入记录,true 为插入,默认是 false,不插入。
    - multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
    - writeConcern :可选,抛出异常的级别。

    由此 update(卡塔尔 方法来更新 col_1 集合中的 title

    $set 操作符为部分更新操作符,只更新 $set 之后的多少,并不是覆盖从前的多少

    1
    db.col_1.update({ 'title': 'MongoDB 教程' }, { $set: { 'title': 'MongoDB' } })

    如上语句只会改正第一条开采的文书档案,倘若要校正多条肖似的文书档案,则必要安装 multi 参数为 true。

    1
    db.col_1.update({ 'title': 'MongoDB 教程' }, { $set: { 'title': 'MongoDB' } }, { multi: true })

    save() 方法因此传播的文书档案来替换本来就有文书档案。语法格式如下:

    1
    2
    3
    4
    5
    6
    db.col_name.save(
    <document>,
    {
    writeConcern: <document>
    }
    )

    以下实例中大家轮换了 col_1 的文档数据:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    document = ({
    "_id": "1",
    "title": "MongoDB save",
    "description": "MongoDB 是一个 Nosql 数据库",
    "by": "菜鸟",
    "url": "http://www.runoob.com",
    "tags": ["mongodb", "database", "NoSQL"],
    });
     
    db.col_1.save(document)

    查询

    find(卡塔尔(قطر‎ 方法,它回到会集中有所文书档案。

    findOne(卡塔尔(قطر‎ 方法,它只回去叁个文书档案。

    1
    2
    3
    4
    db.col_name.find(query, projection)
     
    - query :可选,使用查询操作符指定查询条件
    - projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

    格式化输出:

    1
    db.col_name.find().pretty()

    翻开集合中文档的个数:

    1
    db.col_name.find().count()

    跳过钦命数量的数额:

    1
    db.col_name.find().skip()

    读取钦赐记录的条数:

    1
    db.col_name.find().limit()

    排序:

    sort(卡塔尔(قطر‎方法能够由此参数内定排序的字段,并采纳 1 和 -1 来内定排序的法子,当中 1 为升序排列,而-1是用以降序排列。

    1
    db.col_name.find().sort({key:1})

    sort(卡塔尔(قطر‎方法能够经过参数钦点排序的字段,并动用 1 和 -1 来内定排序的艺术,个中 1 为升序排列,而-1是用于降序排列。

    Where 语句

    如若你想博得”col”集合中 “likes” 大于100,小于 200 的数码,你能够动用以下命令:

    1
    2
    3
    4
    db.col.find({likes : {$lt :200, $gt : 100}})
     
    // 类似于SQL语句:
    Select * from col where likes>100 AND likes<200;
    条件操作符 中文 全英文
    $gt 大于 greater than
    $gte 大于等于 greater than equal
    $lt 小于 less than
    $lte 小于等于 less than equal
    $ne 不等于 not equal

     

    澳门新葡4473网站 6

     

    $type 操作符

    用来搜寻会集中十三分的数据类型

     

    澳门新葡4473网站 7

     

    一经想取得 “col” 集结中 title 为 String 的数额,你能够动用以下命令:

    1
    db.col.find({"title" : {$type : 2}})

    AND 条件

    find(卡塔尔国 方法能够流传多少个键(key卡塔尔(قطر‎,各种键(key卡塔尔国以逗号隔开分离,语法格式如下:

    1
    2
    3
    4
    db.col_name.find({key1:value1, key2:value2}).pretty()
     
    // 类似于 SQL and 语句:
    SELECT * FROM col_name WHERE key1='value1' AND key2=value2

    OR 条件

    1
    2
    3
    4
    db.col_name.find({ $or: [{ "by": "菜鸟教程" }, { "title": "MongoDB 教程" }] }).pretty()
     
    // 类似于 SQL or 语句:
    SELECT * FROM col_name WHERE key1=value1 OR key2=value2

    AND 和 ORubicon 联合使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    db.col_name.find({
    "likes": {
    $gt: 50
    },
    $or: [{
    "by": "菜鸟教程"
    }, {
    "title": "MongoDB 教程"
    }]
    }).pretty()
     
    // 类似常规 SQL 语句:
    SELECT * FROM col_name where likes>50 AND (by = '菜鸟教程' OR title = 'MongoDB 教程')

    MongoDB - 索引

    在意:从 mongoDB 3.0 初阶,ensureIndex 被放任,未来都独有是 createIndex 的二个外号。

    目录平时能够异常的大的==提升查询的功能==,若无索引,MongoDB在读取数据时必得扫描集结中的种种文件并精选这个切合查询条件的笔录。

    这种扫描全集合的查询成效是非常的低的,非常在管理大批量的数目时,查询可以要开销几十秒以致几秒钟,那对网址的质量是可怜沉重的。

    目录是特别的数据构造,索引存款和储蓄在多少个轻易遍历读取的数码集结中,索引是对数据库表中一列或多列的值实行排序的一种构造

    索引常用命令

    getIndexes 查看集结索引情形

    1
    db.col_name.getIndexes()

    hint 强迫行使索引

    1
    db.col_name.find({age:{$lt:30}}).hint({name:1, age:1}).explain()

    删除索引(不会删除 _id 索引)

    1
    2
    3
    db.col_name.dropIndexes()
     
    db.col_name.dropIndex({firstname: 1})

    createIndex() 方法

    MongoDB使用 createIndex(卡塔尔(قطر‎ 方法来创制索引

    key 为您要开创的索引字段,1为按升序创制索引,-1为按降序创制索引。

    也得以设置使用多少个字段创制索引(关系型数据库中称作复合索引)

    1
    db.col_name.createIndex({key:1})

    createIndex(State of Qatar 采纳可选参数,可选参数列表如下:

     

    澳门新葡4473网站 8

     

    _id 索引

    对于各种插入的多少,都会自动生成一条独一的 _id 字段,_id 索引是超过20%成团默许创建的目录

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    > db.col_1.insert({x:10})
    WriteResult({ "nInserted" : 1 })
     
    > db.col_1.find()
    { "_id" : ObjectId("59658e56aaf42d1c98dd95a2"), "x" : 10 }
     
    > db.col_1.getIndexes()
    [
    {
    "v" : 2,
    "key" : {
    "_id" : 1
    },
    "name" : "_id_",
    "ns" : "runoob.col_1"
    }
    ]

    字段解释:

    • v 表示 version,在 Mongo3.2 以前的本子中,会存在 {v:0}(版本锁为0)的图景。在3.2事后的版本中,{v:0} 不再允许接收,这一部分能够不去关注,因为 v 由系统活动处理

    • key 表示作为目录的键。1 或 -1表示排序格局,1为升序,1为降序

    • name 表示索引的名字,暗中认可生成名称的规规矩矩是用作索引的字段_排序模式

    • ns 代表 namespace 命名空间,由数据库名称.集合名称组成

    单键索引

    最日常的目录,不会自动创立

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    // 对 x 字段创建升序索引
     
    > db.col_1.createIndex({x:1})
    {
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
    }
     
    > db.col_1.find()
    { "_id" : ObjectId("59658e56aaf42d1c98dd95a2"), "x" : 10 }
     
    > db.col_1.getIndexes()
    [
    {
    "v" : 2,
    "key" : {
    "_id" : 1
    },
    "name" : "_id_",
    "ns" : "runoob.col_1"
    },
    {
    "v" : 2,
    "key" : {
    "x" : 1
    },
    "name" : "x_1",
    "ns" : "runoob.col_1"
    }
    ]

    多键索引

    单键索引的值为贰个纯粹的值,多键索引的值有四个数据(如数组)

    假使mongoDB中插入数组类型的多键数据,索引是自行建构的,无需特意钦定

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    > db.col_1.insert({z:[1,2,3,4,5]})
    WriteResult({ "nInserted" : 1 })
     
    > db.col_1.find()
    { "_id" : ObjectId("59658e56aaf42d1c98dd95a2"), "x" : 10 }
    { "_id" : ObjectId("5965923eaaf42d1c98dd95a3"), "y" : 20 }
    { "_id" : ObjectId("59659828aaf42d1c98dd95a4"), "z" : [ 1, 2, 3, 4, 5 ] }
     
    > db.col_1.find({z:3})
    { "_id" : ObjectId("59659828aaf42d1c98dd95a4"), "z" : [ 1, 2, 3, 4, 5 ] }

    复合索引

    同一时候对三个字段创立索引

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    > db.col_2.insert({x:10,y:20,z:30})
    WriteResult({ "nInserted" : 1 })
     
    > db.col_2.find()
    { "_id" : ObjectId("59659a57aaf42d1c98dd95a5"), "x" : 10, "y" : 20, "z" : 30 }
     
    > db.col_2.createIndex({x:1,y:1})
    {
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
    }
     
    > db.col_2.getIndexes()
    [
    {
    "v" : 2,
    "key" : {
    "_id" : 1
    },
    "name" : "_id_",
    "ns" : "runoob.col_2"
    },
    {
    "v" : 2,
    "key" : {
    "x" : 1,
    "y" : 1
    },
    "name" : "x_1_y_1",
    "ns" : "runoob.col_2"
    }
    ]

    过期索引

    又称 TTL(Time To Live,生存时间)索引,即在一段时间后会过期的目录(如登入消息、日志等)

    逾期后的索引会连同文书档案一齐删除

    expireAfterSeconds:钦定七个以秒为单位的数值,设定集合的生活时间。

    注意:

    • 储存在过期索引字段的值必得是点名的时光档期的顺序(必得是 ISODate 或 ISODate 数组,不能利用时间戳,不然无法被电动删除)
    • 假定内定了 ISODate 数组,则依照最小的日子开展删除
    • 过期索引不能是复合索引(不可能内定五个过期时间)
    • 去除时间存在多少固有误差(1 分钟左右)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    > db.col_3.insert({x:new Date()})
    WriteResult({ "nInserted" : 1 })
     
    > db.col_3.find()
    { "_id" : ObjectId("59659f3baaf42d1c98dd95a7"), "x" : ISODate("2017-07-12T04:02:03.835Z") }
     
    > db.col_3.createIndex({x:1},{expireAfterSeconds:10})
    {
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
    }
     
    > db.col_3.getIndexes()
    [
    {
    "v" : 2,
    "key" : {
    "_id" : 1
    },
    "name" : "_id_",
    "ns" : "runoob.col_3"
    },
    {
    "v" : 2,
    "key" : {
    "x" : 1
    },
    "name" : "x_1",
    "ns" : "runoob.col_3",
    "expireAfterSeconds" : 10
    }
    ]
     
    > db.col_3.find()
    // 无返回

    全文索引

    此情此景:全网址关键词找出

    key-value 中,key 此时为 $**(也得以是绘声绘色某 key),value 当时为三个定点的字符串(如 text

    全文索引相同度,与 sort 函数一同行使功用更加好

    1
    db.col_7.find({ $text: { $search: "aa bb" } }, { score: { $meta: "textScore" } }).sort({ score: { $meta: "textScore" } })

    注意:

    • 种种集合只可以成立二个全文索引
    • MongoDB 从 2.4 版本开端扶植全文字笔迹考验索,从 3.2 版本起初扶持汉语
    • (好像)只可以对总体单词查询,无法对单词的截取部分查询
    • 首要词之间的空格表示
    • 重大词早先的 - 表示
    • 关键词加引号表示 (需用 转义)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    > db.col_7.find()
    { "_id" : ObjectId("5965aa84aaf42d1c98dd95b0"), "title" : "aa bb cc", "author" : "白小明", "article" : "这是白小明的一篇文章,标题《aa bb cc》" }
    { "_id" : ObjectId("5965aa8faaf42d1c98dd95b1"), "title" : "abc def", "author" : "白小明", "article" : "这是白小明的一篇文章,标题《aa bb cc》" }
    { "_id" : ObjectId("5965aedfaaf42d1c98dd95b2"), "title" : "aa bb", "author" : "白小明", "article" : "这是白小明的一篇文章,标题《aa bb cc》" }
     
    > db.col_7.createIndex({"title": "text"})
     
    > db.col_7.find({$text:{$search:"aa"}})
    { "_id" : ObjectId("5965aa84aaf42d1c98dd95b0"), "title" : "aa bb cc", "author" : "白小明", "article" : "这是白小明的一篇文章,标题《aa bb cc》" }
    { "_id" : ObjectId("5965aedfaaf42d1c98dd95b2"), "title" : "aa bb", "author" : "白小明", "article" : "这是白小明的一篇文章,标题《aa bb cc》" }
     
    > db.col_7.find({$text:{$search:"aa cc"}})
    { "_id" : ObjectId("5965aa84aaf42d1c98dd95b0"), "title" : "aa bb cc", "author" : "白小明", "article" : "这是白小明的一篇文章,标题《aa bb cc》" }
    { "_id" : ObjectId("5965aedfaaf42d1c98dd95b2"), "title" : "aa bb", "author" : "白小明", "article" : "这是白小明的一篇文章,标题《aa bb cc》" }
     
    > db.col_7.find({$text:{$search:""aa" "cc""}})
    { "_id" : ObjectId("5965aa84aaf42d1c98dd95b0"), "title" : "aa bb cc", "author" : "白小明", "article" : "这是白小明的一篇文章,标题《aa bb cc》" }
     
    > db.col_7.find({$text:{$search:"aa bb"}},{score:{$meta:"textScore"}}).sort({score:{$meta:"textScore"}})
    { "_id" : ObjectId("5965aedfaaf42d1c98dd95b2"), "title" : "aa bb", "author" : "白小明", "article" : "这是白小明的一篇文章,标题《aa bb cc》", "score" : 1.5 }
    { "_id" : ObjectId("5965aa84aaf42d1c98dd95b0"), "title" : "aa bb cc", "author" : "白小明", "article" : "这是白小明的一篇文章,标题《aa bb cc》", "score" : 1.3333333333333333 }
     
     
    > db.col_7.dropIndexes()
     
    > db.col_7.createIndex({"author": "text"}))
     
    > db.col_7.find({$text:{$search:"小明"}})})
    >
     
    > db.col_7.find({$text:{$search:"白小明"}})
    { "_id" : ObjectId("5965aa84aaf42d1c98dd95b0"), "title" : "aa bb cc", "author" : "白小明", "article" : "这是白小明的一篇文章,标题《aa bb cc》" }
    { "_id" : ObjectId("5965aa8faaf42d1c98dd95b1"), "title" : "abc def", "author" : "白小明", "article" : "这是白小明的一篇文章,标题《aa bb cc》" }
    { "_id" : ObjectId("5965aedfaaf42d1c98dd95b2"), "title" : "aa bb", "author" : "白小明", "article" : "这是白小明的一篇文章,标题《aa bb cc》" }

    地理地方索引

    翻开近日的点

    MongoDB - 聚合

    ==分组总括==

    MongoDB 中会面首要用以拍卖数据(如平均值,求和等卡塔尔国,并再次来到总括后的多寡结果。相仿sql语句中的 count(*)。

    aggregate() 方法

    1
    db.col_name.aggregate(AGGREGATE_OPERATION)

    下表彰显了有的集结的表明式:

     

    澳门新葡4473网站 9

     

    实例

    计算各个小编所写的篇章数

    在底下的例子中,大家因此字段by_user字段对数码举办分组,并总结by_user字段相通值的总额。

    集聚中的数据如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    {
    "_id" : ObjectId("5963b992a812aa05b9d2e765"),
    "title" : "MongoDB Overview",
    "description" : "MongoDB is no sql database",
    "by_user" : "runoob.com",
    "url" : "http://www.runoob.com",
    "tags" : [
    "mongodb",
    "database",
    "NoSQL"
    ],
    "likes" : 100
    }
    {
    "_id" : ObjectId("5963b9aaa812aa05b9d2e766"),
    "title" : "NoSQL Overview",
    "description" : "No sql database is very fast",
    "by_user" : "runoob.com",
    "url" : "http://www.runoob.com",
    "tags" : [
    "mongodb",
    "database",
    "NoSQL"
    ],
    "likes" : 10
    }
    {
    "_id" : ObjectId("5963b9bba812aa05b9d2e767"),
    "title" : "Neo4j Overview",
    "description" : "Neo4j is no sql database",
    "by_user" : "Neo4j",
    "url" : "http://www.neo4j.com",
    "tags" : [
    "neo4j",
    "database",
    "NoSQL"
    ],
    "likes" : 750
    }

    行使aggregate(State of Qatar总结结果如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    db.col_1.aggregate([{
    $group: {
    _id: "$by_user",
    num_tutorial: {
    $sum: 1
    }
    }
    }])
     
    // 返回
    { "_id" : "Neo4j", "num_tutorial" : 1 }
    { "_id" : "runoob.com", "num_tutorial" : 2 }
     
    // 以上实例类似sql语句
    select by_user, count(*) from col_1 group by by_user

    聚拢管道

    管道在Unix和Linux中貌似用于将日前命令的出口结果作为下叁个下令的参数。

    MongoDB 的会集管道将MongoDB文书档案在三个管道管理完成后将结果传递给下二个管道管理。管道操作是足以重新的。

    表明式:管理输入文档并出口。表明式是无状态的,只可以用于总结当前群集管道的文书档案,不可能处理任何的文书档案。

    汇合管道常用的多少个操作:

    • $project:纠正输入文书档案的协会。能够用来重命名、扩充或删除域,也得以用来成立总结结果以致嵌套文书档案。
    • $match:用于过滤数据,只输出切合条件的文档。$match使用MongoDB的行业内部查询操作。
    • $limit:用来界定MongoDB聚合管道再次来到的文书档案数。
    • $skip:在集结管道中跳过内定数量的文书档案,并赶回余下的文书档案。
    • $unwind:将文书档案中的某一个数组类型字段拆分成多条,每条包蕴数组中的八个值。
    • $group:将汇集中的文档分组,可用于总括结果。
    • $sort:将输入文书档案排序后输出。
    • $geoNear:输出邻近某一地理地方的有序文书档案。

    实例

    $project 实例

    0 为不展现,1为展现,暗许景况下 _id 字段是 1

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    db.articles.aggregate({
    $project: {
    _id: 0,
    title: 1,
    by_user: 1,
    }
    });
     
    // 返回
    { "title" : "MongoDB Overview", "by_user" : "runoob.com" }
    { "title" : "NoSQL Overview", "by_user" : "runoob.com" }
    { "title" : "Neo4j Overview", "by_user" : "Neo4j" }

    $match 实例

    $match 用于获取分数大于70低于或等于90笔录,然后将相符条件的笔录送到下一阶段$group管道操作符举行拍卖。

    1
    2
    3
    4
    5
    6
    7
    db.articles.aggregate([
    { $match: { score: { $gt: 70, $lte: 90 } } },
    { $group: { _id: null, count: { $sum: 1 } } }
    ]);
     
    // 返回
    { "_id" : null, "count" : 1 }

    $skip 实例

    经过 $skip 管道操作符处理后,前2个文书档案被”过滤”掉。

    1
    db.col_1.aggregate({ $skip: 2 });

    MongoDB - 复制

    MongoDB 复制(别本集)是==将数据同步在五个服务器==的经过。

    复制提供了数量的冗余备份,并在多个服务器上囤积数据别本,提升了数额的可用性, 并可以保证数据的安全性。

    特点:

    • 维持数据的安全性
    • 数码高可用性 (24*7)
    • 不幸苏醒,复制允许你从硬件故障和劳务中断中还原数据。
    • 不必停机维护(如备份,重新建立索引,压缩)
    • 布满式读取数据

    • N 个节点的集群

    • 别的节点可看做主节点

    • 全体写入操作都在主节点上
    • 机动故障转移
    • 机关恢复生机

    复制原理

    mongodb 的复制最少必要三个节点。

    • 内部一个是==主节点==,担任管理客商端诉求,
    • 其它的都以==从节点==,担负复制主节点上的数额。

    mongodb种种节点见死不救的选配格局为:一主一从、一主多从。

    主节点记录在其上的享有操作oplog,从节点定时轮询主节点获得这几个操作,然后对友好的多寡别本奉行那一个操作,进而保障从节点的数据与主节点一致。

     

    image

    复制设置

    1. 闭馆正在周转的MongoDB服务器。

    今昔大家透过点名 –replSet 选项来运行mongoDB

    1
    mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"

    实例:

    下边实例会运转三个名叫rs0的MongoDB实例,其端口号为27017。

    启航后展开命令提醒框并接连上mongoDB服务。

    在Mongo客商端使用命令rs.initiate(卡塔尔(قطر‎来运维二个新的别本集。

    咱俩得以运用rs.conf(卡塔尔国来查阅别本集的配备

    翻开别本集状态使用 rs.status(卡塔尔国 命令

    1
    mongod --port 27017 --dbpath "D:set upmongodbdata" --replSet rs0

    别本集加多成员

    累计别本集的积极分子,大家要求使用多条服务器来运转mongo服务。

    步入Mongo客商端,并接收rs.add(卡塔尔方法来增添别本集的分子。

    1
    rs.add(HOST_NAME:PORT)

    实例:

    一经你早已运营了一个名称为 mongod1.net,端口号为27017的Mongo服务。

    在客商端命令窗口使用rs.add(State of Qatar 命令将其增添到别本集中,命令如下所示:

    1
    rs.add("mongod1.net:27017")

    MongoDB 中你只可以通过主节点将Mongo服务增多到别本集中, 剖断当前运营的Mongo服务是不是为主节点能够动用命令

    1
    db.isMaster()

    MongoDB的别本集与大家广泛的为主有所区别,主从在主机宕机后具有服务将结束,而别本集在主机宕机后,别本会接管主节点改为主节点,不会身不由己宕机的状态。

    MongoDB - 分片

    当MongoDB存储海量的多少时,==一台机器大概不足以存储数据==,也恐怕不足以提供可承担的读写吞吐量。那时,大家就能够透过在多台机器上划分数据,使得数据库系统能积攒和拍卖更加的多的数码。

    何以选拔分片?

    • 复制全部的写入操作到主节点
    • 延期的敏感数据会在主节点查询
    • 单个别本集约束在11个节点
    • 当央求量宏大时会现身内部存款和储蓄器不足。
    • 当地球磁性盘不足
    • 垂直扩张价格高昂

    分片集群布局

     

    image

    几个重要组件:

    • Shard: 用于积存实际的数据块,实际生产条件中三个shard server剧中人物可由几台机器组个八个replica set担负,幸免主机单点故障
    • Config Server: mongod实例,存款和储蓄了全体 ClusterMetadata,在那之中囊括 chunk音信。
    • Query Routers: 前端路由,顾客端因此接入,且让全部集群看上去像单一数据库,前端采取能够透明使用。

    MongoDB - 监控

    监理能够领悟 MongoDB 的==运市价况==及==质量==

    MongoDB中提供了 mongostat 和 mongotop 七个指令来监督MongoDB的周转意况。

    mongostat

    它会间距固依期期获得 mongodb 的一时一刻运作状态,并出口。

    纵然您发觉数据库猛然变慢也许有任何标题标话,你直接的操作就思谋采纳mongostat 来查看 mongo 的图景。

    1
    mongostat

     

    澳门新葡4473网站 10

     

    mongotop

    mongotop用来追踪MongoDB的实例,提供每一种群集的总括数据。私下认可意况下,mongotop每一秒刷新叁回。

    1
    mongotop

     

    澳门新葡4473网站 11

     

    输出结果字段表明:

    • ns:包蕴数据库命名空间,后面一个结合了数据库名称和聚众。
    • db:包含数据库的名目。名字为 . 的数据库针对全局锁定,而非特定数据库。
    • total:mongod花销的年华南理文高校作在此个命名空间提供总额。
    • read:提供了大量的时间,那mongod开支在实行读操作,在此命名空间。
    • write:提供这些命名空间实行写操作,那mongod花了多量的时光。

    等待的年月长度,以秒为单位,默许 1s

    1
    mongotop 10

    报告各类数据库的的使用

    1
    mongotop --locks

    MongoDB - 备份与还原

    mongodump

    在Mongodb中我们应用 mongodump 命令来备份MongoDB数据。

    该命令能够导出全体数据到钦命目录中。

    mongodump命令能够因此参数钦定导出的数额量级转存的服务器。

    1
    2
    3
    4
    5
    mongodump -h dbhost -d dbname -o dbdirectory
     
    -h:MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
    -d:需要备份的数据库实例,例如:test
    -o:备份的数据存放位置,例如:c:datadump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。

    实例

    备份 mongodb_study 数据库中的全部集结到 E:MongoDBdump

    1
    mongodump -h 127.0.0.1 -d mongodb_study -o E:MongoDBdump

    不带任何参数,即在当前目录下备份全部数据库实例

    1
    mongodump

    备份全数MongoDB数据

    1
    2
    3
    4
    mongodump --host HOST_NAME --port PORT_NUMBER
     
    // 如
    mongodump --host w3cschool.cc --port 27017

    备份钦点数据库的聚合

    1
    2
    3
    4
    mongodump --collection COLLECTION_NAME --db DB_NAME
     
    // 如
    mongodump --collection mycol --db test

    mongorestore

    在Mongodb中大家运用 mongorestore 命令来过来MongoDB数据。

    1
    2
    3
    4
    5
    6
    7
    mongorestore -h <hostname><:port> -d dbname <path>
     
    --host <:port>, -h <:port>:MongoDB所在服务器地址,默认为: localhost:27017
    --db , -d :需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
    --drop:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!
    <path>:mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:datadumptest。你不能同时指定 <path> 和 --dir 选项,--dir也可以设置备份目录。
    --dir:指定备份的目录,你不能同时指定 <path> 和 --dir 选项。

    实例

    平复存放在 E:MongoDBdump 中的数据库 mongodb_study,恢复生机前后的数据库名不必近似

    1
    mongorestore -h localhost /db mongodb_study /dir E:MongoDBdumpmongodb_study

    Node.js 连接 MongoDB

    与 MySQL 不一样的是 MongoDB 会自动创造数据库和聚众,所以利用前大家无需手动去创制。

    安装驱动:npm install mongodb

    运行 node:node connect

    实例

    connect.js

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    const MongoClient = require('mongodb').MongoClient;
     
    // 自动创建数据库 runoob
    let mongoConnect = 'mongodb://localhost:27017/runoob';
     
    // 插入数据,插入到数据库 runoob 的 site 集合中
    let insertData = function(db, callback) {
    // 自动创建集合 site
    let collection = db.collection('site');
    // 插入文档
    let data = [{
    "name": "菜鸟教程",
    "url": "www.runoob.com"
    }, {
    "name": "菜鸟工具",
    "url": "c.runoob.com"
    }];
     
    collection.insert(data, function(err, result) {
    if (err) {
    console.log('Error:' + err);
    return;
    }
    callback(result);
    });
    };
     
    // 删除数据,删除所有 name 为 "菜鸟工具" 的文档
    let deleteData = function(db, callback) {
    let collection = db.collection('site');
    let whereStr = {
    "name": "菜鸟工具"
    };
     
    collection.remove(whereStr, function(err, result) {
    if (err) {
    console.log('Error:' + err);
    return;
    }
    callback(result);
    });
    };
     
    // 修改数据,将所以 name 为 "菜鸟教程" 的 url 改为 https://www.runoob.com
    let updateData = function(db, callback) {
    let collection = db.collection('site');
    let whereStr = {
    "name": "菜鸟教程"
    };
    let updateStr = {
    $set: {
    "url": "https://www.runoob.com"
    }
    };
     
    collection.update(whereStr, updateStr, {
    multi: true
    }, function(err, result) {
    if (err) {
    console.log('Error:' + err);
    return;
    }
    callback(result);
    });
    };
     
    // 查询数据,查询 name 为 "菜鸟教程" 的数据
    let selectData = function(db, callback) {
    let collection = db.collection('site');
    let whereStr = {
    "name": '菜鸟教程'
    };
     
    collection.find(whereStr).toArray(function(err, result) {
    if (err) {
    console.log('Error:' + err);
    return;
    }
    callback(result);
    });
    };
     
    MongoClient.connect(mongoConnect, function(err, db) {
    console.log("连接成功!");
     
    insertData(db, function(result) {
    console.log("插入数据成功!");
    console.log(result);
    db.close();
    });
     
    deleteData(db, function(result) {
    console.log("删除数据成功!");
    console.log(result);
    db.close();
    });
     
    updateData(db, function(result) {
    console.log("修改数据成功!");
    console.log(result);
    db.close();
    });
     
    selectData(db, function(result) {
    console.log("查询数据成功!");
    console.log(result);
    db.close();
    });
    });

    mongoose

    Mongoose学习参考文书档案——基本功篇:

    mongoose学习笔记:

    mongoose学习文书档案:

    Nodejs学习笔记(十九)— Mongoose介绍和入门:

    Mongoose周全驾驭:

    Node.js 有针对 MongoDB 的数据库驱动:mongodb。你能够动用 npm install mongodb 来安装。不过一直利用 mongodb 模块尽管强大而灵活,但多少麻烦,笔者就接收 mongoose 吧。

    Mongoose 基于nodejs、创设在 mongodb 之上,使用 javascript 编程,是==连接 mongodb 数据库的软件包==,使mongodb的文书档案数据模型变的幽雅起来,方便对mongodb文书档案型数据库的再而三和增加和删除改查等常规数量操作。

    mongoose 是现阶段选择 mean(mongodb express angularjs nodejs)全栈开拓必用的接连数据库软件包。

    ==mongoose ,提供了Schema、Model 和 Document 对象,用起来越发有利。== 别的,mongoose 还应该有 Query 和 Aggregate 对象:Query 达成查询、Aggregate 达成聚合

    mongoose 多少个基本点概念

     

    澳门新葡4473网站 12

     

    Schema、Model、Entity 的涉及:Schema生成Model,Model成立Entity,Model和Entity都可对数据库操作引致影响,但Model比Entity更具操作性。

    1. Schema 模式

    Schema 对象定义==文书档案构造==,可以定义字段、类型、独一性、索引、验证等。

    Schema 不仅仅定义了文书档案结构和使用质量,还足以有扩展插件、实例方法、静态方法、复合索引、文书档案生命周期钩子

    1
    2
    3
    4
    5
    // new mongoose.Schema() 中传入一个 JSON 对象,定义属性和属性类型
    var BlogSchema = new mongoose.Schema({
    title: String,
    author: String
    });

    有些时候,大家创制的 Schema 不止要为前面包车型大巴 Model 和 Entity 提供公共的品质,还要提供公共的主意。

    2. Model 模型

    Model 对象表示集结中的全体文书档案

    由 Schema 揭橥生成的模型,具备抽象属性和作为的数据库操作对

    3. Document 文档

    Document 可等同于 Entity

    由 Model 创立的实体,他的操作也会影响数据库

    使用

    1. 概念叁个 Schema 方式
    2. 将该 Schema 发布为 Model
    3. 用 Model 创建 Entity
    4. Entity 是兼具实际的数据库操作 CRUD 的

    mongoose 的 connection 对象定义了部分风浪,举例 connected open close error 等,我们得以监听这一个事件。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    const mongoose = require('mongoose');
     
    let db = mongoose.connect('mongodb://127.0.0.1:27017/test');
     
    db.connection.on('error', console.error.bind(console, '数据库连接失败:'));
     
    db.connection.once('open', function() {
    console.log('数据库连接成功!');
     
    // 定义一个 Schema 模式
    // new Schema() 中传入一个 JSON 对象,定义属性和属性类型
    let PersonSchema = new mongoose.Schema({
    name: {
    type: String,
    unique: true
    },
    password: String
    });
     
    // 将该 Schema 发布为 Model
    let PersonModel = mongoose.model('col_1', PersonSchema);
     
    // 拿到了 Model 对象,就可以执行增删改查等操作了
    // 如果要执行查询,需要依赖 Model,当然 Entity 也是可以做到的
    PersonModel.find(function(err, result) {
    // 查询到的所有person
    });
     
    // 用 Model 创建 Entity
    let personEntity = new PersonModel({
    name: 'Krouky',
    password: '10086'
    });
     
    // Entity 是具有具体的数据库操作 CRUD 的
    // 执行完成后,数据库就有该数据了
    personEntity.save(function(err, result) {
    if (err) {
    console.log(err);
    } else {
    console.log(`${result} saved!`);
    }
    });
    });

    本文由澳门新葡4473网站发布于项目,转载请注明出处:MongoDB 4.2 正式发布 引入分布式事务

    关键词: