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

{<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}})

类型

数字

备注

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

-1.

Max key

127

 

(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()
    >