您的位置:首页 > 数据库 > Mongodb

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

2017-03-20 17:02 267 查看


一,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 }

   >
    

字段类型描述
cappedBoolean(可选)如果为true,则启用封顶集合。封顶集合是固定大小的集合,会自动覆盖最早的条目,当它达到其最大大小。如果指定true,则需要也指定尺寸参数。
autoIndexIDBoolean(可选)如果为true,自动创建索引_id字段的默认值是false。
sizenumber(可选)指定最大大小字节封顶集合。如果封顶如果是 true,那么你还需要指定这个字段。
maxnumber(可选)指定封顶集合允许在文件的最大数量。
   例子如下:
   >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{<key>:<value>}db.mycol.find({"by":"tutorials yiibai"}).pretty()where by = 'tutorials yiibai'
Less Than{<key>:{$lt:<value>}}db.mycol.find({"likes":{$lt:50}}).pretty()where likes < 50
Less Than Equals{<key>:{$lte:<value>}}db.mycol.find({"likes":{$lte:50}}).pretty()where likes <= 50
Greater Than{<key>:{$gt:<value>}}db.mycol.find({"likes":{$gt:50}}).pretty()where likes > 50
Greater Than Equals{<key>:{$gte:<value>}}db.mycol.find({"likes":{$gte:50}}).pretty()where likes >= 50
Not Equals{<key>:{$ne:<value>}}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}})   

类型数字备注
Double1 
String2 
Object3 
Array4 
Binary data5 
Undefined6已废弃。
Object id7 
Boolean8 
Date9 
Null10 
Regular Expression11 
JavaScript13 
Symbol14 
JavaScript (with scope)15 
32-bit integer16 
Timestamp17 
64-bit integer18 
Min key255Query with -1.
Max key127 
(9) "update() save() "更新文档

  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 :可选,抛出异常的级别。

   (注: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(

     <query>,

     <justOne>

   )

   如果你的 MongoDB 是 2.6 版本以后的,语法格式如下:

   db.collection.remove(

     <query>,

     {

       justOne: <boolean>,

       writeConcern: <document>

     }

   )

   参数说明:

   query :(可选)删除的文档的条件。

   justOne : (可选)如果设为 true 或 1,则只删除一个文档。

   writeConcern :(可选)抛出异常的级别。

   如果你想删除所有数据,可以使用以下方式

   >db.col.remove({})

   >db.col.find()

   >
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: