大数据学习
bigdata learning
Toggle navigation
大数据学习
主页
openGauss数据库
Flume
MongoDB
Hadoop
数据库实验
Kafka
Zookeeper
Hbase
Manual
Spark
Neo4j
InfluxDB
RabbitMQ
Flink
About Me
归档
标签
05-MongoDB基本操作
MongoDB
2024-04-17 09:59:39
26
0
0
bigdata
MongoDB
# MongoDB 创建数据库 > MongoDB 创建数据库 语法 MongoDB 创建数据库的语法格式如下: use DATABASE_NAME 如果数据库不存在,则创建数据库,否则切换到指定数据库。 ## 语法 MongoDB 创建数据库的语法格式如下: ``` use DATABASE_NAME ``` 如果数据库不存在,则创建数据库,否则切换到指定数据库。 ## 实例 以下实例我们创建了数据库 runoob: ``` > use runoob switched to db runoob > db runoob > ``` 如果你想查看所有数据库,可以使用 **show dbs** 命令: ``` > show dbs admin 0.000GB config 0.000GB local 0.000GB > ``` 可以看到,我们刚创建的数据库 runoob 并不在数据库的列表中, 要显示它,我们需要向 runoob 数据库插入一些数据。 ``` > db.runoob.insert({"name":"菜鸟教程"}) WriteResult({ "nInserted" : 1 }) > show dbs admin 0.000GB config 0.000GB local 0.000GB runoob 0.000GB ``` MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。 > **注意:** 在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合 (数据表) 后要再插入一个文档(记录),集合才会真正创建。 # MongoDB 删除数据库 > MongoDB 删除数据库 语法 MongoDB 删除数据库的语法格式如下: db.dropDatabase() 删除当前数据库,默认为 test,你可以使用 db 命令查看当前数据库名。 ## 语法 MongoDB 删除数据库的语法格式如下: ``` db.dropDatabase() ``` 删除当前数据库,默认为 test,你可以使用 db 命令查看当前数据库名。 ## 实例 以下实例我们删除了数据库 runoob。 首先,查看所有数据库: ``` > show dbs admin 0.000GB config 0.000GB local 0.000GB runoob 0.000GB ``` 接下来我们切换到数据库 runoob: ``` > use runoob switched to db runoob > ``` 执行删除命令: ``` > db.dropDatabase() { "dropped" : "runoob", "ok" : 1 } ``` 最后,我们再通过 show dbs 命令数据库是否删除成功: ``` > show dbs admin 0.000GB config 0.000GB local 0.000GB ``` ## 删除集合 集合删除语法格式如下: ``` db.collection.drop() ``` 以下实例删除了 runoob 数据库中的集合 site: ``` > use runoob switched to db runoob > db.createCollection("runoob") # 先创建集合,类似数据库中的表 > show tables # show collections 命令会更加准确点 runoob > db.runoob.drop() true > show tables > ``` # MongoDB 创建集合 MongoDB 中使用 **createCollection()** 方法来创建集合。 语法格式: ``` db.createCollection(name, options) ``` 参数说明: * name: 要创建的集合名称 * options: 可选参数, 指定有关内存大小及索引的选项 options 可以是如下参数: <table><thead><tr><th>字段</th><th>类型</th><th>描述</th></tr></thead><tbody><tr><td>capped</td><td>布尔</td><td>(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。<br><strong>当该值为 true 时,必须指定 size 参数。</strong></td></tr><tr><td>autoIndexId</td><td>布尔</td><td>3.2 之后不再支持该参数。(可选)如为 true,自动在 _id 字段创建索引。默认为 false。</td></tr><tr><td>size</td><td>数值</td><td>(可选)为固定集合指定一个最大值,即字节数。<br><strong>如果 capped 为 true,也需要指定该字段。</strong></td></tr><tr><td>max</td><td>数值</td><td>(可选)指定固定集合中包含文档的最大数量。</td></tr></tbody></table> 在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。 ## 实例 在 test 数据库中创建 runoob 集合: ``` > use test switched to db test > db.createCollection("runoob") { "ok" : 1 } > ``` 如果要查看已有集合,可以使用 show collections 或 show tables 命令: ``` > show collections runoob system.indexes ``` 下面是带有几个关键参数的 createCollection() 的用法: 创建固定集合 mycol,整个集合空间大小 6142800 B, 文档最大个数为 10000 个。 ``` > db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } ) { "ok" : 1 } > ``` 在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。 ``` > db.mycol2.insert({"name" : "菜鸟教程"}) > show collections mycol2 ... ``` # MongoDB 删除集合 > MongoDB 中使用 drop() 方法来删除集合。 **语法格式:** ``` db.collection.drop() ``` 参数说明: * 无 **返回值** 如果成功删除选定集合,则 drop() 方法返回 true,否则返回 false。 ## 实例 在数据库 mydb 中,我们可以先通过 show collections 命令查看已存在的集合: ``` >use mydb switched to db mydb >show collections mycol mycol2 system.indexes runoob > ``` 接着删除集合 mycol2 : ``` >db.mycol2.drop() true > ``` 通过 show collections 再次查看数据库 mydb 中的集合: ``` >show collections mycol system.indexes runoob > ``` 从结果中可以看出 mycol2 集合已被删除。 # MongoDB 插入文档 文档的数据结构和 JSON 基本一样。 所有存储在集合中的数据都是 BSON 格式。 BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。 MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下: ``` db.COLLECTION_NAME.insert(document) 或 db.COLLECTION_NAME.save(document) ``` * save():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用 **db.collection.insertOne()** 或 **db.collection.replaceOne()** 来代替。 * insert(): 若插入的数据主键已经存在,则会抛 **org.springframework.dao.DuplicateKeyException** 异常,提示主键重复,不保存当前数据。 **3.2 版本之后新增了 db.collection.insertOne() 和 db.collection.insertMany()。** db.collection.insertOne() 用于向集合插入一个新文档,语法格式如下: ``` db.collection.insertOne( <document>, { writeConcern: <document> } ) ``` db.collection.insertMany() 用于向集合插入一个多个文档,语法格式如下: ``` db.collection.insertMany( [ <document 1> , <document 2>, ... ], { writeConcern: <document>, ordered: <boolean> } ) ``` 参数说明: * document:要写入的文档。 * writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。 * ordered:指定是否按顺序写入,默认 true,按顺序写入。 ## 实例 以下文档可以存储在 MongoDB 的 runoob 数据库 的 col 集合中: ``` >db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库', by: '菜鸟教程', url: 'http://www.runoob.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }) ``` 以上实例中 col 是我们的集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。 查看已插入文档: ``` > db.col.find() { "_id" : ObjectId("56064886ade2f21f36b03134"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } > ``` 我们也可以将数据定义为一个变量,如下所示: ``` > document=({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库', by: '菜鸟教程', url: 'http://www.runoob.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }); ``` 执行后显示结果如下: ``` { "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } ``` 执行插入操作: ``` > db.col.insert(document) WriteResult({ "nInserted" : 1 }) > ``` 插入文档你也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。 # MongoDB 更新文档 MongoDB 使用 **update()** 和 **save()** 方法来更新集合中的文档。接下来让我们详细来看下两个函数的应用及其区别。 ## update() 方法 update() 方法用于更新已存在的文档。语法格式如下: ``` db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } ) ``` **参数说明:** * **query** : update 的查询条件,类似 sql update 查询内 where 后面的。 * **update** : update 的对象和一些更新的操作符(如 $,$inc...)等,也可以理解为 sql update 查询内 set 后面的 * **upsert** : 可选,这个参数的意思是,如果不存在 update 的记录,是否插入 objNew,true 为插入,默认是 false,不插入。 * **multi** : 可选,mongodb 默认是 false, 只更新找到的第一条记录,如果这个参数为 true, 就把按条件查出来多条记录全部更新。 * **writeConcern** : 可选,抛出异常的级别。 ## 实例 我们在集合 col 中插入如下数据: ``` >db.col.insert({ title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库', by: '菜鸟教程', url: 'http://www.runoob.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }) ``` 接着我们通过 update() 方法来更新标题 (title): ``` >db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) # 输出信息 > db.col.find().pretty() { "_id" : ObjectId("56064f89ade2f21f36b03136"), "title" : "MongoDB", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } > ``` 可以看到标题 (title) 由原来的 "MongoDB 教程" 更新为了 "MongoDB"。 以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。 ``` >db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true}) ``` * * * ## save() 方法 save() 方法通过传入的文档来替换已有文档,_id 主键存在就更新,不存在就插入。语法格式如下: ``` db.collection.save( <document>, { writeConcern: <document> } ) ``` **参数说明:** * **document** : 文档数据。 * **writeConcern** : 可选,抛出异常的级别。 ## 实例 以下实例中我们替换了 _id 为 56064f89ade2f21f36b03136 的文档数据: ``` >db.col.save({ "_id" : ObjectId("56064f89ade2f21f36b03136"), "title" : "MongoDB", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "Runoob", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "NoSQL" ], "likes" : 110 }) ``` 替换成功后,我们可以通过 find() 命令来查看替换后的数据 ``` >db.col.find().pretty() { "_id" : ObjectId("56064f89ade2f21f36b03136"), "title" : "MongoDB", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "Runoob", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "NoSQL" ], "likes" : 110 } > ``` ## 更多实例 只更新第一条记录: ``` db.col.update({ "count" : { $gt : 1} } , { $set : { "test2" : "OK"} } ); ``` 全部更新: ``` db.col.update({ "count" : { $gt : 3} } , { $set : { "test2" : "OK"} },false,true ); ``` 只添加第一条: ``` db.col.update({ "count" : { $gt : 4} } , { $set : { "test5" : "OK"} },true,false ); ``` 全部添加进去: ``` db.col.update({ "count" : { $gt : 5} } , { $set : { "test5" : "OK"} },true,true ); ``` 全部更新: ``` db.col.update({ "count" : { $gt : 15} } , { $inc : { "count" : 1} },false,true ); ``` 只更新第一条记录: ``` db.col.update({ "count" : { $gt : 10} } , { $inc : { "count" : 1} },false,false ); ``` # MongoDB 删除文档 > MongoDB remove() 函数是用来移除集合中的数据。 > MongoDB 数据更新可以使用 update() 函数。在执行 remove() 函数前先执行 find() 命令来判断执行的条件是否正确,这是一个比较好的习惯。 ## 语法 remove() 方法的基本语法格式如下所示: ``` db.collection.remove( <query>, <justOne> ) ``` 如果你的 MongoDB 是 2.6 版本以后的,语法格式如下: ``` db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document> } ) ``` **参数说明:** * **query** :(可选)删除的文档的条件。 * **justOne** : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。 * **writeConcern** :(可选)抛出异常的级别。 ## 实例 以下文档我们执行两次插入操作: ``` >db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库', by: '菜鸟教程', url: 'http://www.runoob.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }) ``` 使用 find() 函数查询数据: ``` > db.col.find() { "_id" : ObjectId("56066169ade2f21f36b03137"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } { "_id" : ObjectId("5606616dade2f21f36b03138"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } ``` 接下来我们移除 title 为'MongoDB 教程' 的文档: ``` >db.col.remove({'title':'MongoDB 教程'}) WriteResult({ "nRemoved" : 2 }) # 删除了两条数据 >db.col.find() …… # 没有数据 ``` * * * 如果你只想删除第一条找到的记录可以设置 justOne 为 1,如下所示: ``` >db.COLLECTION_NAME.remove(DELETION_CRITERIA,1) ``` 如果你想删除所有数据,可以使用以下方式(类似常规 SQL 的 truncate 命令): ``` >db.col.remove({}) >db.col.find() > ```
上一篇:
05-Kafka生产者示例
下一篇:
05-Neo4j-RETURN命令
文档导航