MongoDB之具体使用(一)

MongoDB快速下载:

http://dl.mongodb.org/dl/win32/x86_64

MongoDB安装详见:

http://blog.csdn.net/qq_33733970/article/details/77983995

MongoDB的使用:

1、数据库操作
增:

use quincy
有则切换,无则创建。空库还有空表没有内容我们看不到!!!

查:

show dbs
显示所有数据库

删:

use quincy
db.dropDatabase()

2、集合操作
增:

use quincy
db.user.insert({‘name’:’quincy’})
创建集合同时,集合内容增加

查:

show tables
或者
show collections

删:

db.user.drop()

3、文档操作
增:

3.1 “_id”不指定系统会使用默认的ObjectId,_id插入后不可修改,可删

关于ObjectId:

MongoDB中存储的文档必须有一个”_id”键。这个键的值可以是任意类型,默认是个ObjectId对象。
在一个集合里,每个文档都有唯一的“_id”,确保集合里每个文档都能被唯一标识。
不同集合”_id”的值可以重复,但同一集合内”_id”的值必须唯一

1、ObjectId

ObjectId是”_id”的默认类型。因为设计MongoDb的初衷就是用作分布式数据库,所以能够在分片环境中生成
唯一的标识符非常重要,而常规的做法:在多个服务器上同步自动增加主键既费时又费力,这就是MongoDB采用
ObjectId的原因。
ObjectId采用12字节的存储空间,是一个由24个十六进制数字组成的字符串
0|1|2|3| 4|5|6| 7|8 9|10|11
时间戳 机器 PID 计数器
如果快速创建多个ObjectId,会发现每次只有最后几位有变化。另外,中间的几位数字也会变化(要是在创建过程中停顿几秒)。
这是ObjectId的创建方式导致的,如上图

时间戳单位为秒,与随后5个字节组合起来,提供了秒级的唯一性。这个4个字节隐藏了文档的创建时间,绝大多数驱动程序都会提供
一个方法,用于从ObjectId中获取这些信息。

因为使用的是当前时间,很多用户担心要对服务器进行时钟同步。其实没必要,因为时间戳的实际值并不重要,只要它总是不停增加就好。
接下来3个字节是所在主机的唯一标识符。通常是机器主机名的散列值。这样就可以保证不同主机生成不同的ObjectId,不产生冲突

接下来连个字节确保了在同一台机器上并发的多个进程产生的ObjectId是唯一的

前9个字节确保了同一秒钟不同机器不同进程产生的ObjectId是唯一的。最后3个字节是一个自动增加的 计数器。确保相同进程的同一秒产生的
ObjectId也是不一样的。

2、自动生成_id

如果插入文档时没有”_id”键,系统会自帮你创建 一个。可以由MongoDb服务器来做这件事。
但通常会在客户端由驱动程序完成。这一做法非常好地体现了MongoDb的哲学:能交给客户端驱动程序来做的事情就不要交给服务器来做。
这种理念背后的原因是:即便是像MongoDB这样扩展性非常好的数据库,扩展应用层也要比扩展数据库层容易的多。将工作交给客户端做就
减轻了数据库扩展的负担。


单条数据增加:
userinfo = {“name”:”quincy”}
db.user.insert(userinfo)

多条数据增加,注意内部为数组形式:
db.user.insertMany([userinfo,userinfo,userinfo])

查:

等于:

db.product.find({“location”:”上海”})

不等于:

db.product.find({“loaction”:{“$ne”:”上海”}})

大于(小于):

db.product.find({“_id”:{“$gt”:2}})

and、or、not

两个条件合在一起,并且的意思(and)
db.user.find({“_id”:{“$gte”:2,”$lte”:5}})
db.user.find({“_id”:{“$gt”:3},”age”:{“$lt”:30}})

or:

db.user.find({“$or”:[{“_id”:{“$gt”:2}},{“name”:”quincy”}]})

取模:

db.user.find({“_id”:{“$mod”:[2,1]}})

not:

db.user.find({“_id”:{“$not”:{“$mod”:[2,1]}}})

成员运算:

db.user.find({“_id”:{“$in”:[1,2,3]}})
db.user.find({“_id”:{“$nin”:[1,2,3]}})

正则匹配:

db.user.find({“_id”:{“$in”:[1,2,3]}})

取出指定字段,1代表显示,2代表不显示

db.user.find({“_id”:3},{“_id”:0,”name”:1,”age”:1})

数组查询:

查一个:
db.user.find({“hobbies”:”read”})
查多个:
db.user.find({“hobbies”:{“$all”:[“swim”,”read”]}})
第四个爱好为music的所有人
db.user.find({“hobbies.3”:”music”})
查看所有人最后2个爱好
db.user.find({},{“hobbies”:{“$slice”:-2},”name”:1})
查看所有人第二到第三个爱好
db.user.find({},{“hobbies”:{“$slice”:[1,2]}})

格式化代码:

db.user.find().pretty()

排序,1代表升序,2代表降序

db.user.find().sort({“name”:1})
分页:
db.user.find().sort({“name”:”quincy”}).limit(2).skip(2)
查找一个:
db.user.findOne({“name”:”quincy”})

{key:null}会找出key为null或者没有key的数据

MongoDB之具体使用(二):
http://blog.csdn.net/qq_33733970/article/details/79132016

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值