7-3 MongoDB 基本操作

创建数据库

# 语法
# 有就切换 没有就创建
use DATABASE_NAME

打印数据库列表

show dbs

** MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。**

删除数据库

# 先切换到 要删除的数据库下
use  test_chen

# 在删除数据库
db.dropDatabase()

<br />


<br />

打印集合列表

show collections

创建集合

** db.createCollection(name, options) **

在命令中, name 是要创建的集合的名称. Options 是一个文件,用于指定配置的集合

参数 类型 描述
Name String 要创建的集合名称
Options Document (可选)指定有关内存大小和索引选项

选项​​参数是可选的,所以只需要到指定的集合名称。以下是可以使用的选项列表:

字段 类型 描述
capped Boolean (可选)如果为true,则启用封顶集合。封顶集合是固定大小的集合,会自动覆盖最早的条目,当它达到其最大大小。如果指定true,则需要也指定尺寸参数。
autoIndexID Boolean (可选)如果为true,自动创建索引_id字段的默认值是false。
size number (可选)指定最大大小字节封顶集合。如果封顶如果是 true,那么你还需要指定这个字段。
max number (可选)指定封顶集合允许在文件的最大数量。

当插入文档,MongoDB 第一检查大小字段封顶集合,然后它会检查最大的字段中。

# 切换数据库 
use test_chen

# 创建集合(不带参数)
db.createCollection("mycollection")

# 创建集合(带参数)
db.createCollection("mycol", { capped : true, autoIndexID : true, size : 6142800, max : 10000 } )


# 插入数据的时候 如果不存在改集合 会自动创建 集合
db.yiibai.insert({"name" : "yiibai"})
如果 yiibai 集合不存在 则自动创建

删除集合

# 语法
db.COLLECTION_NAME.drop()

# 删除 名为yiibai的集合
db.yiibai.drop()

<br />


<br />

数据类型

    String : 这是最常用的数据类型来存储数据。在MongoDB中的字符串必须是有效的UTF-8。

    Integer : 这种类型是用来存储一个数值。整数可以是32位或64位,这取决于您的服务器。

    Boolean : 此类型用于存储一个布尔值 (true/ false) 。

    Double : 这种类型是用来存储浮点值。

    Min/ Max keys : 这种类型被用来对BSON元素的最低和最高值比较。

    Arrays : 使用此类型的数组或列表或多个值存储到一个键。

    Timestamp : 时间戳。这可以方便记录时的文件已被修改或添加。

    Object : 此数据类型用于嵌入式的文件。

    Null : 这种类型是用来存储一个Null值。

    Symbol : 此数据类型用于字符串相同,但它通常是保留给特定符号类型的语言使用。

    Date : 此数据类型用于存储当前日期或时间的UNIX时间格式。可以指定自己的日期和时间,日期和年,月,日到创建对象。

    Object ID : 此数据类型用于存储文档的ID。

    Binary data : 此数据类型用于存储二进制数据。

    Code : 此数据类型用于存储到文档中的JavaScript代码。

    Regular expression : 此数据类型用于存储正则表达式

<br />


<br />

查询文档

find() 方法

# 语法
db.COLLECTION_NAME.find()

# 例子
db.test_chen.find()


find() 方法将在非结构化的方式显示所有的文件。

pretty() 方法

结果显示在一个格式化的方式,可以使用 pretty() 方法.

# 语法
db.mycol.find().pretty()


#例子
db.mycol.find().pretty()

# 输出
{
       "_id": ObjectId(7df78ad8902c), 
       "title": "MongoDB Overview",
       "description": "MongoDB is no sql database", 
       "by": "tutorials yiibai",
       "url": "http://www.yiibai.com",
       "tags": ["mongodb", "database", "NoSQL"], 
       "likes": "100"
}

除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档。

RDBMS Where子句和MongoDB等同语句

|操作 | 语法| 例子| 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|

AND 在MongoDB中用法

在 find() 方法,如果通过多个键分离',',那么 MongoDB 处理 AND 条件。AND 基本语法如下所示:

# 语法
db.mycol.find({key1:value1, key2:value2}).pretty()

# 例子
# 下面给出的例子将显示所有的教程,标题是“MongoDB Overview“

db.mycol.find({"by":"tutorials yiibai","title": "MongoDB Overview"}).pretty()

# 对于上面给出的例子相当于where子句 ' where by='yiibai' AND title='MongoDB Overview' , 可以通过任意数量的键值对在 find 子句。

MongoDB中OR

OR条件的基础上要查询文件,需要使用$or关键字。OR 基本语法如下所示:


# 语法
db.mycol.find( 
      { 
           $or: [ 
                   {key1: value1}, 
                   {key2:value2} 
                   ] 
      }
).pretty()

# 例子
db.mycol.find({
     $or:[
             {"by":"yiibai"},
             {"title": "MongoDB Overview"}
         ]
}).pretty()

AND 和 OR 一起使用

下面给出的例子将显示有像的文件大于100,其标题是“MongoDB Overview'或者是'yiibai' 。
等效于 SQL where子句 为 'where likes>10 AND (by = 'yiibai' OR title = 'MongoDB Overview')'

db.mycol.find({
              "likes": {$gt:10}, 
              $or: [
                     {"by": "yiibai"},
                     {"title": "MongoDB Overview"}
                     ]
}).pretty()

<br />


<br />

插入文档

要插入数据到 MongoDB 集合,需要使用 MongoDB 的 insert()save() 方法。

insert() 方法

# 语法
db.COLLECTION_NAME.insert(document)


# 例子
db.test_one.insert({
   title: 'test', 
   description: 'testestest',
   by: 'chenxiaomo',
   url: 'http://www.baidu.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100
})


# 插入多条
db.post.insert([
{
   title: 'MongoDB Overview', 
   description: 'MongoDB is no sql database',
   by: 'tutorials yiibai',
   url: 'http://www.yiibai.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100
},
{
   title: 'NoSQL Database', 
   description: 'NoSQL database doesn't have tables',
   by: 'tutorials yiibai',
   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 方法同上

<br />


<br />

更新文档

MongoDB的 update()save() 方法用于更新文档的集合。
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 ** :可选,抛出异常的级别。

Save() 方法

替换符合条件的文档

# 语法
db.collection.save(
   <document>,
   {
     writeConcern: <document>
   }
)

# 例子
db.mycol.save(
   {
      "_id" : ObjectId(5983548781331adf45ec7), 
      "title":"Yiibai New Topic", 
      "by":"Yiibai"
   }
)

更多实例


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

<br />


<br />

删除文档

remove() 方法

# 语法
db.collection.remove(
   <query>,
   <justOne>
)

# 2.6 后的语法
db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)

参数说明:

  • **query **:(可选)删除的文档的条件。
  • **justOne **: (可选)如果设为 true 或 1,则只删除一个文档。
  • **writeConcern ** :(可选)抛出异常的级别。
# 删除指定条件的
db.col.remove({'title':'MongoDB 教程'})

# 删除指定条件的  并且 指定删除条数
db.col.remove({'title':'MongoDB 教程'},  2)

#  删除全部的
db.col.remove({})



<br />


<br />

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容