mongodb(二)-- mongodb shell及基本操作

一,MongoDB shell基本命令

(1)"show dbs" 命令可以显示所有数据的列表。

(2)"db" 命令可以显示当前数据库对象或集合。

(3)"use"命令,可以连接到一个指定的数据库。当数据库不存在时,use创建数据库。

   创建的数据库在show dbs列表中是不存在的。要显示数据库,需要把它插入至少一个文件。
   db.movie.insert({"name":"yiibai tutorials"})
   在 MongoDB 默认数据库test。如果没有创建任何数据库,然后集合将被存储在测试数据库。

(4)"dropDatabase()" 删除数据库

   命令如下:db.dropDatabase()
   这将删除选定的数据库。如果没有选择任何数据库,那么它会删除默认的“test”数据库
   例子:
   >use mydb
   switched to db mydb
   >db.dropDatabase()
   >{ "dropped" : "mydb", "ok" : 1 }
   >

(5)"db.createCollection(name,options)" 创建集合

   "show collections" 命令来检查创建的集合
   在命令中, name 是要创建集合的名称。 options 是一个文档,用于指定集合的配置,可不写
   例子:
   >use test
   switched to db test
   >db.createCollection("mycollection")
   { "ok" : 1 }
   >
    
字段 类型 描述
capped Boolean (可选)如果为true,则启用封顶集合。封顶集合是固定大小的集合,会自动覆盖最早的条目,当它达到其最大大小。如果指定true,则需要也指定尺寸参数。
autoIndexID Boolean (可选)如果为true,自动创建索引_id字段的默认值是false。
size number (可选)指定最大大小字节封顶集合。如果封顶如果是 true,那么你还需要指定这个字段。
max number (可选)指定封顶集合允许在文件的最大数量。
   例子如下:
   >db.createCollection("mycol", { capped : true, autoIndexID : true, size : 6142800, max : 10000 }    )
   { "ok" : 1 }
   >


(6)"db.COLLECTION_NAME.drop()"删除集合

   例子如下:
   >use mydb
   switched to db mydb
   >db.mycollection.drop()
   true
   >

(7)"db.COLLECTION_NAME.insert(document)"在集合中插入文档

   >db.mycol.insert({
   _id: ObjectId(7df78ad8902c),
   title: 'MongoDB Overview', 
   description: 'MongoDB is no sql database',
   by: 'yiibai tutorials',
   url: 'http://www.yiibai.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100
   })
   这里 mycol 是我们的集合名称,它是在之前的教程中创建。如果集合不存在于数据库中,那么MongoDB创建此    集合,然后插入文档进去。在如果我们不指定_id参数插入的文档,那么 MongoDB 将为文档分配一个唯一的      ObjectId。
   _id 是12个字节十六进制数在一个集合的每个文档是唯一的。 12个字节被划分如下:
   _id: ObjectId(4 bytes timestamp, 3 bytes machine id, 2 bytes process id, 3 bytes incrementer)
   

   要以单个查询插入多个文档,可以通过文档 insert() 命令的数组方式。
   >db.post.insert([
   {
   title: 'MongoDB Overview', 
   description: 'MongoDB is no sql database',
   by: 'yiibai tutorials',
   url: 'http://www.yiibai.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100
   },
   {
   title: 'NoSQL Database', 
   description: 'NoSQL database doesn't have tables',
   by: 'yiibai tutorials',
   url: 'http://www.yiibai.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 20, 
   comments: [
      {
         user:'user1',
         message: 'My first comment',
         dateCreated: new Date(2013,11,10,2,35),
         like: 0 
      }
   ]
   }
   ])
   
   save()
   如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。
   
   save和insert区别
   当"_id"在集合中存在时,insert不做处理,save进行更新




(8)"db.COLLECTION_NAME.find()"查询文档

   find() 方法将在非结构化的方式显示所有的文件。 如果显示结果是格式化的,那么可以用pretty() 方法。
   如:>db.mycol.find().pretty()

   例子如下:
   >db.mycol.find().pretty()
   {
   "_id": ObjectId(7df78ad8902c),
   "title": "MongoDB Overview", 
   "description": "MongoDB is no sql database",
   "by": "yiibai tutorials",
   "url": "http://www.yiibai.com",
   "tags": ["mongodb", "database", "NoSQL"],
   "likes": "100"
   }
   >
   
   除了find()方法还有findOne()方法,仅返回一个文档。
   >var model=db.user.findOne({"name":"jack"})
   >model.age=30
   这里使用findOne方法更新age为30

   
   A,查询返回指定字段
     db.mydb.find( { type: 'food' }, { item: 1, qty: 1, _id:0 } )
返回type是food的文档的  item,qty字段,不返回_id字段(默认返回_id字段)


    B,查询条件(where)
   要在一些条件下查询文件,(等同于where语句)
   1,大小比较
   
操作 语法 例子 RDBMS 等同
Equality {:} db.mycol.find({"by":"tutorials yiibai"}).pretty() where by = 'tutorials yiibai'
Less Than {:{$lt:}} db.mycol.find({"likes":{$lt:50}}).pretty() where likes < 50
Less Than Equals {:{$lte:}} db.mycol.find({"likes":{$lte:50}}).pretty() where likes <= 50
Greater Than {:{$gt:}} db.mycol.find({"likes":{$gt:50}}).pretty() where likes > 50
Greater Than Equals {:{$gte:}} db.mycol.find({"likes":{$gte:50}}).pretty() where likes >= 50
Not Equals {:{$ne:}} db.mycol.find({"likes":{$ne:50}}).pretty() where likes != 50
   2,and
   在find() 方法,如果通过多个键分离',',那么 MongoDB 处理 AND 条件。AND 基本语法如下所示:
   >db.mycol.find({key1:value1, key2:value2}).pretty()
   
   3,or
   OR条件的基础上要查询文件,需要使用$or关键字。OR 基本语法如下所示:
   >db.mycol.find(
   {
      $or: [
    {key1: value1}, {key2:value2}
      ]
   }
   ).pretty()

   4,and和or一起使用
   举例如下:
   >db.mycol.find({ "likes": {$gt:10} , $or: [{"by": "yiibai"}, {"title": "MongoDB Overview"}]          }).pretty()
   {
   "_id": ObjectId(7df78ad8902c),
   "title": "MongoDB Overview", 
   "description": "MongoDB is no sql database",
   "by": "yiibai",
   "url": "http://www.yiibai.com",
   "tags": ["mongodb", "database", "NoSQL"],
   "likes": "100"
   }
   >

   5,in 和 notIn
    "$in"  "$nin"与in 和 notIn对应
 
   6,正则表达式
   db.user.find({"name":/^j/,"name":/e$/})

   7,当查询比较复杂时,可以使用$where
   db.user.find({$where:function(){return this.name=='jack'}})

   8,$type实例
     $type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。 
     如果想获取 "col" 集合中 title 为 String 的数据,你可以使用以下命令:
     db.col.find({"title" : {$type : 2}})   


类型 数字 备注
Double 1  
String 2  
Object 3  
Array 4  
Binary data 5  
Undefined 6 已废弃。
Object id 7  
Boolean 8  
Date 9  
Null 10  
Regular Expression 11  
JavaScript 13  
Symbol 14  
JavaScript (with scope) 15  
32-bit integer 16  
Timestamp 17  
64-bit integer 18  
Min key 255 Query with -1.
Max key 127  





(9) "update() save() "更新文档

  update() 方法用于更新已存在的文档。语法格式如下:

  db.collection.update(
   ,
   ,
   {
     upsert: ,
     multi: ,
     writeConcern:
   }
   )
  
   
   参数说明:
   query : update的查询条件,类似sql update查询内where后面的。
   update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
   upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,          不插入。
   multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条          记录全部更新。
   writeConcern :可选,抛出异常的级别。
   (注:upsert和multi默认false)

   举例:
   >db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})



   1,update() 更新现有文档值。

   >db.COLLECTION_NAME.update(SELECTIOIN_CRITERIA, UPDATED_DATA)
   例子如下:
   >db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}})
   这里用了$set 局部更新 仅仅更新指定字段 
   >db.user.update({"name":"jack"},{"name":"jack","age":"20"})
   这里是全局更新,把所有的数据更新
   >db.user.update({"name":"jack"},{$inc:{"age":30}})
   上面的$set和$inc是修改器,$inc表示自增,每次修改会在原有的基础上自增$inc指定的值


   MongoDB默认将只更新单一的文件,来更新多个你需要设置参数置'multi' 为true
   如:
   >db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}},          {multi:true})

   2,save() 

   >db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA})
   如果不指定_id字段save()方法类似于insert()方法。如果指定_id字段,则会更新(update)该_id的数        据。  

   

(10)update()更多实例

   只
更新 第一条记录:
   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 );
 

(11)"remove()"删除文档

   db.collection.remove(
     ,
     
   )
   如果你的 MongoDB 是 2.6 版本以后的,语法格式如下:
   db.collection.remove(
     ,
     {
       justOne: ,
       writeConcern:
     }
   )
   参数说明:
   query :(可选)删除的文档的条件。
   justOne : (可选)如果设为 true 或 1,则只删除一个文档。
   writeConcern :(可选)抛出异常的级别。

   如果你想删除所有数据,可以使用以下方式
   >db.col.remove({})
   >db.col.find()
   >

你可能感兴趣的:(mongodb)