MongoDB基本操作【增删改查】以及数据类型

一、基本操作

MongoDB自带JavaScript shell,可在shell中使用命令行与mongodb进行交互,因此,shell是非常有用的,通过它可以执行管理操作,检查运行实例,或进行尝试。

1.运行shell

在安装目录下进入bin目录,运行mongo.exe客户端工具就可以启动shell。
shell是一个功能完备的JavaScript解释器,可以运行任意JavaScript程序,我们可以进行简单的数学运算:

MongoDB Enterprise > x=200
200
MongoDB Enterprise > x/5
40

也可以充分利用JavaScript标准库:

MongoDB Enterprise > Math.sin(Math.PI/2)
1
MongoDB Enterprise > new Date("2018/2/5")
ISODate("2018-02-04T16:00:00Z")

再者,也可以调用JavaScript函数:

MongoDB Enterprise > function fun(n){
... if(n<=1)return 1;
... return n*fun(n-1);
... }
MongoDB Enterprise > fun(5)
120

在这里需要注意的是,shell会自动检测JavaScript语句的完整性,如果没写完可再下一行接着写,如果在某处连续三次输入回车键可取消没有输入完的命令。

2.插入数据

insert函数可以将一个文档添加到集合中,比如我们存储文章的例子,我们可以创建一个全局变量,或者将要插入的文件作为参数直接传入insert(参数)中:

MongoDB Enterprise > post={"title":"My Blog Post","content":"Here is my blog","date":new Date()}
{
        "title" : "My Blog Post",
        "content" : "Here is my blog",
        "date" : ISODate("2018-02-05T12:05:28.635Z")
}
MongoDB Enterprise > db.user.insert(post)

在mongodb中还可以使用JavaScript shell的形式使用for循环来批量插入数据:

MongoDB Enterprise > for(i=0;i<10;i++)db.user.insert({a:i})
WriteResult({ "nInserted" : 1 })

3.读取数据

读取数据可以使用find和findOne方法,如果只想查看一个文档,可以用findOne:

MongoDB Enterprise > db.user.findOne()
{
        "_id" : ObjectId("5a770499e6b6b47f96264526"),
        "name" : "shinelon",
        "age" : 24
}

也可以使用find和findOne函数接受一个查询文档作为限定条件。这样就可以查找符合一定条件的文档。

4.更新数据

使用update函数可以更新数据,它可以接受至少两个参数:第一个是限定条件(用于匹配待更新的文档),第二个是新文档。

MongoDB Enterprise > db.user.update({y:350},{y:400})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
MongoDB Enterprise > db.user.find({y:400})
{ "_id" : ObjectId("5a7725f860e2bfaf4c1622c7"), "y" : 400 }

如果想使用条件更新部分数据就必须使用$set{},比如我们将博客的content字段改为“update blog content”:

MongoDB Enterprise > db.user.insert({"title":"My Bolg","content":"my bolg content","date":new Date()})
WriteResult({ "nInserted" : 1 })
MongoDB Enterprise > db.user.find({"title":"My Bolg"})
{ "_id" : ObjectId("5a78537babbfc5c12a2463cd"), "title" : "My Bolg", "content" : "my bolg content", "date" : ISODate("2018-02-05T12:52:11.034Z") }
MongoDB Enterprise > db.user.update({"title":"My Bolg"},{$set:{"content":"update bolg content"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
MongoDB Enterprise > db.user.find({"title":"My Bolg"})
{ "_id" : ObjectId("5a78537babbfc5c12a2463cd"), "title" : "My Bolg", "content" : "update bolg content", "date" : ISODate("2018-02-05T12:52:11.034Z") }

在某一种场景下,当我们更新文件时它不存在但是我们想让它立即创建,即更新不存在数据时自动创建该 数据,这时就用到了update的第三个参数,将设置为true即可。

MongoDB Enterprise > db.user.update({"name":"jack"},{"name":"shinelon"},true)
WriteResult({
        "nMatched" : 0,
        "nUpserted" : 1,
        "nModified" : 0,
        "_id" : ObjectId("5a7854de60e2bfaf4c1622c8")
})

批量更新数据:当我们更新数据时它只会更新查找到的第一条数据,如果我们想更新所有符合条件的数据,就必须设置update的第四个参数,将其设置为true。

MongoDB Enterprise > db.user.find({b:2})
{ "_id" : ObjectId("5a7855f8abbfc5c12a2463d8"), "b" : 2 }
{ "_id" : ObjectId("5a7855f9abbfc5c12a2463d9"), "b" : 2 }
{ "_id" : ObjectId("5a7855faabbfc5c12a2463da"), "b" : 2 }
MongoDB Enterprise > db.user.update({b:2},{$set:{b:5}},false,true)
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })
MongoDB Enterprise > db.user.find({b:5})
{ "_id" : ObjectId("5a7855f8abbfc5c12a2463d8"), "b" : 5 }
{ "_id" : ObjectId("5a7855f9abbfc5c12a2463d9"), "b" : 5 }
{ "_id" : ObjectId("5a7855faabbfc5c12a2463da"), "b" : 5 }

5.删除数据

对于数据的删除我们可以使用remove函数 ,它可以使用参数,也可以不用使用任何参数,当不使用参数时会将该集合内的所有文档去全部删除,也可以接受一个条件作为参数进行条件删除:

MongoDB Enterprise > db.user.remove({b:5})
WriteResult({ "nRemoved" : 3 })
MongoDB Enterprise > db.user.find({b:5})
MongoDB Enterprise >

6.索引的使用
创建普通索引:

db.collection.ensureIndex({keyName:1})

查看索引相关信息:

db.collection.stats()

查看索引使用情况:

db.collection.find({key:value}).explain()

删除索引:

db.collection.dropIndex({keyName:1})

删除集合,也会将集合中的索引全部删除。

创建唯一索引:

db.collection.ensureIndex({keyName:1},{unique:true})

7.固定集合

固定集合指的是事先创建而且大小固定的集合 。

固定集合特性:固定集合很像环形队列,如果空间不足,最早的文档就会被删除,为新的文档腾出空间。一般来说,固定集合适用于任何想要自动淘汰过期属性的场景,没有太多的操作限制。

创建固定集合:

db.createCollection(“collectionName”,{capped:true,size:100000,max:100});  

可以使用size和max大小来设置固定集合的大小。size单位为KB,max指定文档的数量。
当指定文档数量上限时,必须同时指定大小。淘汰机制只有在容量还没有满时才会依据文档数量来工作。要是容量满了,淘汰机制会依据容量来工作。

二、数据类型

在概念上,mongodb的文档和JavaScript中的对象相近,因此可认为它类似于JSON,因此mongodb支持所有的json格式的数据类型。

null值
null值表示空值或者不存在的字段。
布尔值
有两个值true和false
数值
shell默认使用64位浮点型数值,对于整数值可以使用NumberInt类(表示4字节带符号整数)或NumberLong类(表示8字符带符号的整数)
字符串
UTF-8字符串都可表示为字符串类型的数据。
正则表达式
查询时,也可以使用正则表达式作为限定条件,语法也与JavaScript的正则表达式语法相同。
数组
数组列表或数据集可以表示为数组:

{"x":["a","b","c"]}

内嵌文档
文档可嵌套其他文档,被嵌套的文档作为父文档的值:

{"x":{"name":"jack"}}

对象id
对象ID是一个12字节的ID,是文档的唯一标识。

{"x":ObjectId()}

除了上面介绍的这些数据类型外还有二进制数据,代码等等数据类型。
在这里我们着重介绍一下对象id,在mongodb的文档中必须有一个"_id"键,这个键的值可以是任何类型的,默认是个ObjectId,因为mongodb设计的初衷是用作分布式数据库,所有没有采用键值自增的形式。
ObjectId使用12字节的存储空间,是一个由24个十六进制数字组成的字符串(每两个字节 可以存储两个十六进制数字)。ObjectId的12个字节按照如下的方式生成:
这里写图片描述

如果插入的文档没有“_id”键,那么系统会自动帮我们创建一个,由服务器自动创建。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值