Mongodb入门--头歌实行MongoDB 数据库基本操作

打印 上一主题 下一主题

主题 1021|帖子 1021|积分 3063

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、数据库创建

   任务形貌

  本关任务:创建数据库。
  相关知识

  本关评测是在 Linux 环境下进行的,MongoDB 的安装与配置测评体系均已默认完成。
  为了完资本关任务,你需要掌握: 1.怎样连接数据库; 2.怎样创建数据库。
  连接数据库

  MongoDB 安装完成后,可以通过 pgrep mongo -l 下令来查看是否已经启动。如图1所示:
  
  

  
                                                           图 1
  
  在操作数据库之前,需要连接它,连接当地数据库服务器,输入下令:mongo,预期输出如图2和图3所示:
  
  
  

  
                                                        图 2
   

  
                                                        图 3
  1. mongo -u mongo -p 13 --authenticationDatabase admin
复制代码
其中连接的警告可以不消管,只要最下方出现“ > ”符号,就阐明连接成功。
  创建数据库

  连接上 MongoDB 之后就可以进行数据库的操作了,接下来我们创建一个名为 Testdb 的数据库,用下令:use Testdb 语句来创建(如果数据库不存在,则创建数据库,否则切换到指定数据库),如图4所示:
  
  

  
                                                                图 4
  
  查看所有数据库我们可以通过 show dbs 下令来查看,如图5所示:
  
  
  

  
                                                                图 5
          
  然而并没有我们刚创建的 Testdb 数据库。要想表现它,我们需要向数据库插入一些数据:db.Testdb.insert({_id:1,name:"王小明"}),如图6所示
  
  
  

  
                                                        图 6
  如今,就可以看到我们创建的数据库 Testdb 了。
  删除数据库

  MongoDB 删除数据库需要先切换到该数据库中:
  1. use Testdb
复制代码
然后再实行删除下令:
  1. db.dropDatabase()
复制代码

  1. > use mydb
  2. switched to db mydb
  3. > db.mydb.insert({_id:1,name:"李小红"})
  4. WriteResult({ "nInserted" : 1 })
复制代码
 二、创建集合

   任务形貌

  本关任务:在数据库中创建一个集合。
  相关知识

  MongoDB 数据库中的集合相称于 MySQL 数据库中的表。
  为了完资本关任务,你需要掌握: 1.怎样在指定的数据库创建集合; 2.查看集合; 3.删除集合。
  在指定的数据库创建集合

  先进入指定数据库 Testdb :use Testdb; 在 Testdb 数据库中创建创建固定集合 test ,整个集合空间大小512000KB,文档最大个数为1000个。
  1. db.createCollection("test", { capped : true, autoIndexId : true, size : 512000, max : 1000 } )
复制代码


  • capped :是一个布尔范例,true 时创建固定集合,必须指定 size。固定集合指有固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。默认为 false;
  • autoIndexId :也是一个布尔范例,如为 true,自动在_id 字段创建索引。默认为 false 
  • size :为固定集合指定一个最大值(以字节 KB 计);
  • max :指定固定集合中包含文档的最大数量。
  不外,和 MySQL 不同的是,在 MongoDB 中,你不肯定需要先创建集合。当你插入一些文档时,MongoDB 会自动创建集合。
  创建集合下令(保举):db.集合名.insert()(注意:一条数据用大括号“ {} ”括起来,多条数据用“ [] ”将所有数据括起来)。
  1. db.mytest2.insert([{"name" : "王小明","sex":"男"},{"name" : "李小红","sex":"女"}])
复制代码
默认 id

  MongoDB 中存储的文档 必须 有一个_id键(如果我们插入数据的时候未指定_id,体系会自动天生一个默认的 id )。这个键的值可以是任何范例的,默认是个 ObjectId 对象。在一个集合内里,每个文档都有唯一的_id值,来确保集合内里每个文档都能被唯一标识。如果有两个集合的话,两个集合可以都有一个值为123的_id键,但是每个集合内里只能有一个_id是123的文档
  查询集合

  查询集合下令:db.集合名.find()。由此我们也能看到 MongoDB 默认创建的_id,如图1所示;
  

  
                                                        图 1
  删除集合

  删除集合下令:db.集合名.drop(),如图2所示;
  
  
  

  
                                                                图 2
  
  1. mongo                #进入MongoDB
  2. > use Testdb2
  3. switched to db Testdb2
  4. > db.t_stu.insert([{"_id" : 1,"name" : "小明","sex" : "男","hobbies" : ["乒乓球","羽毛球"]},{"_id" : 2,"name" : "小红","sex" : "女","hobbies" : [ "画画","唱歌"]}])
  5. BulkWriteResult({
  6.         "writeErrors" : [
  7.                 {
  8.                         "index" : 0,
  9.                         "code" : 11000,
  10.                         "errmsg" : "E11000 duplicate key error collection: Testdb2.t_stu index: _id_ dup key: { : 1.0 }",
  11.                         "op" : {
  12.                                 "_id" : 1,
  13.                                 "name" : "小明",
  14.                                 "sex" : "男",
  15.                                 "hobbies" : [
  16.                                         "乒乓球",
  17.                                         "羽毛球"
  18.                                 ]
  19.                         }
  20.                 }
  21.         ],
  22.         "writeConcernErrors" : [ ],
  23.         "nInserted" : 0,
  24.         "nUpserted" : 0,
  25.         "nMatched" : 0,
  26.         "nModified" : 0,
  27.         "nRemoved" : 0,
  28.         "upserted" : [ ]
  29. })
  30. > db.t_stu.find()
  31. { "_id" : 1, "name" : "小明", "sex" : "男", "hobbies" : [ "乒乓球", "羽毛球" ] }
  32. { "_id" : 2, "name" : "小红", "sex" : "女", "hobbies" : [ "画画", "唱歌" ] }
复制代码
三、文档操作一

   任务形貌

  本关任务:文档数据在 MongoDB 中的插入和更新。
  相关知识

  本章节中我们将向大家先容文档数据在 MongoDB 中的基本操作。
  文档的数据结构和 JSON 基本一样,所有存储在集合中的数据都是 BSON 格式。BSON 是一种类 JSON 的一种二进制情势的存储格式,简称: Binary JSON 。
  为了完资本关任务,你需要掌握: 1.插入文档下令; 2.更新文档的两种方法。
  插入文档

  插入文档下令:db.集合名.insert(文档)。 该下令前面两关我们也有用到。除了前两关的用法以外,我们还可以将数据定义为一个变量,如下所示:
  1. document=({_id:1,
  2.     name: '王小明',
  3.     sex: '男',
  4.     hobbies: ['乒乓球','羽毛球'],
  5.     birthday: '1996-02-14'
  6. });
复制代码
然后实行插入操作:
  1. db.person.insert(document)
复制代码
person 是集合名,如果该集合不在该数据库中,MongoDB 会自动创建该集归并插入文档,查看 person 集合,如图1所示:
  
  

  
                                                        图 1
  更新文档

  更新文档紧张会用到 update() 方法和 save() 方法。
  update() 方法

  我们先把 document 插入到集合 person2;
  1. db.person2.insert(document)
复制代码
由于信息有误,上面 birthday 的格式错了,该怎么去修改这个字段的值呢?这时就要用到 update() 方法了。
  用 update() 方法来更新 person2 的数据,把王小明的出生日期替换成1996,下令如下:
  1. db.person2.update({birthday:"1996-02-14"},{$set:{birthday:"1996"}})
复制代码
更新后如图2所示( pretty() 方法的作用是使文档整齐的输出):
  
  

  
                                        图 2
   可以发现:
  

  • update() 有两个参数,都是对象,中心用逗号“ ,”间隔;
  • 第一个参数表现需要修改的值;
  • 第二个参数用 $set 操作符指向更新后的值。
  save() 方法

  save() 方法通过传入的文档替换已有文档
  我们先把 document 插入到集合 person3 中;
  1. db.person3.insert(document)
复制代码
如果这时我们把一个人的数据都弄错了,怎么办呢?这时用 save() 方法来更新修改一下 person3 的数据就比力方便。
  用 save() 方法把王小明的数据修改为李小红的数据:
  
  1. db.person3.save({
  2.     "_id" :1,
  3.     "name" : "李小红",
  4.     "sex" : "女",
  5.     "hobbies" : [
  6.             "画画",
  7.             "唱歌",
  8.             "跳舞"
  9.     ],
  10.     "birthday" : "1996-06-14"
  11. })
复制代码
注:如果 save() 法也指定了_id,则对文档进行更新未指定_id则会实行插入功能,MongoDB 默认自动天生一个不重复的_id。
  
  总结:
  

  • update() 方法仅适用于修改某条数据中的某个键值;
  • save() 方法适用于修改整条数据。
  1. > use Testdb3
  2. switched to db Testdb3
  3. > document=({"_id" : 1,"name" : "张小华","sex" : "男","phone" : '12356986594',"hobbies" : [ "打篮球","踢足球","唱歌" ]})
  4. {
  5.         "_id" : 1,
  6.         "name" : "张小华",
  7.         "sex" : "男",
  8.         "phone" : "12356986594",
  9.         "hobbies" : [
  10.                 "打篮球",
  11.                 "踢足球",
  12.                 "唱歌"
  13.         ]
  14. }
  15. > db.stu1.insert(document)
  16. WriteResult({ "nInserted" : 1 })
  17. > db.stu2.insert(document)
  18. WriteResult({ "nInserted" : 1 })
  19. > db.stu3.insert(document)
  20. WriteResult({ "nInserted" : 1 })
  21. > db.stu2.update({"phone" : '12356986594'},{$set:{"phone" : '18356971462'}})
  22. WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
  23. > db.stu3.save({"_id" : 1,"name" : "张晓晓","sex" : "女","phone" : '12365498704',"hobbies" : [ "跳舞","羽毛球","唱歌" ]})
  24. WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
复制代码
四、 文档操作二

   任务形貌

  本关任务:文档数据在 MongoDB 中的查询和删除。
  相关知识

  为了完资本关任务,你需要掌握:
  

  • 查询文档下令;
  • 删除文档下令。
  查询文档

  我们先插入文档到集合 stu1
  1. document=([{
  2.     name:'张小华',
  3.     sex:'男',
  4.     age:20,
  5.     phone:'12356986594',
  6.     hobbies:['打篮球','踢足球','唱歌']
  7. },{
  8.     name:'李小红',
  9.     sex:'女',
  10.     age:18,
  11.     phone:'12355487536',
  12.     hobbies:['跳舞','唱歌']
  13. }])
复制代码
  1. db.stu1.insert(document)
复制代码

  然后查看 stu1 ,下令和结果如图1所示(由于我们没有设置_id,所以 MongoDB 会默认天生):
  
  

  
                                                图 1
   上述表现的文档格式不够整齐,我们可以利用 pretty() 方法,使输出更整齐,如图2所示:
  
  

  
                                        图 2
  条件查询

     操作格式范例关系数据库中类似的语句等于{<key>:<value>}db.stu1.find({"name":"李小红"}).pretty()where name = '李小红'小于{<key>:{$lt:<value>}}db.stu1.find({"age":{$lt:18}}).pretty()where age < 18小于或等于{<key>:{$lte:<value>}}db.stu1.find({"age":{$lte:18}}).pretty()where age <= 18大于{<key>:{$gt:<value>}}db.stu1.find({"age":{$gt:18}}).pretty()where age > 18大于或等于{<key>:{$gte:<value>}}db.stu1.find({"age":{$gte:18}}).pretty()where age >= 18不等于{<key>:{$ne:<value>}}db.stu1.find({"age":{$ne:18}}).pretty()where age != 18    如今我们来查找一下 age 大于18岁的数据,下令和结果如图3所示:
  
  
  

  
                                                图 3
  
  AND 条件

  find() 方法可以传入多个键 (key),每个键 (key) 以逗号隔开,即常规 SQL 的 AND 条件。如查询集合 stu1 中年龄为20岁的男性信息:
  1. db.stu1.find({"age":20, "sex":"男"}).pretty()
复制代码
查询结果如图4所示:
  
  
  

  
                                                        图 4
  删除文档数据

  删除指定的数据:
  1. db.stu1.remove({'age':20}) //删除年龄为20的数据
复制代码
查看该集合的内容,如果只剩下如图5所示的信息,阐明数据删除成功:
  
  

  
                                                图 5
  删除全部数据(集归并不会删除):

  1. db.remove({})
复制代码
查看该集合的内容,如果如图6所示,无表现大概表现为空,阐明数据全部删除:
  
  
  

  
  1. #########begin#########
  2. echo "
  3. document=([
  4.     {_id:1,name:'西西',sex:'女',age:23,national:'汉族'},
  5.     {_id:2,name:'东东',sex:'男',age:20,national:'苗族'},
  6.     {_id:3,name:'北北',sex:'男',age:19,national:'汉族'},
  7.     {_id:4,name:'南南',sex:'女',age:15,national:'傣族'}]);
  8. db.stu1.insert(document);
  9. db.stu2.insert(document);
  10. db.stu1.find({'age':{\$gte:15},'sex':'女'});
  11. db.stu1.find({'national':'苗族'});
  12. db.stu1.find({'age':{\$lt:20},'sex':'男'});
  13. db.stu2.remove({});
  14. "
  15. #########end#########
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

滴水恩情

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表