MongoDB的基本使用
来源:互联网 发布:美工电脑是什么意思 编辑:程序博客网 时间:2024/05/16 17:45
基本概念
database
database
数据库 table
collection
数据库表/集合 row
document
数据记录行/文档 column
field
数据字段/域 index
index
索引 table joins
表连接,MongoDB
不支持 primary key
primary key
主键,MongoDB
自动将_id
字段设置为主键 RDBMS
MongoDB
Mysqld/Oracle
mongod
客户端 mysql/sqlplus
mongo
- 隐式创建数据库和集合
NoSql:not only sql
非关系型数据库
- 面向对象式的
新浪微博:redis
google
:bigtable
amazon
:simpledb
淘宝:tair
视觉网站:mongodb
优酷运营数据分析:mongodb
飞信空间:handlersocket
豆瓣社区:beansdb
- 优点:
简单的扩展
快速的读写
低廉的成本
灵活的数据模型 - 缺点:
只是在局部展现出某些优势
不提供对sql
的支持
支持的特性不够丰富
- 优点:
现有的产品不够成熟相对成熟的产品
mongodb
,redis
是一个面向集合的,模式自由的文档型数据库
- 面向集合:
- 文件存储格式:
bson
(二进制的json
) - 使用场景:
持久化的缓存层
高效的实时性
用于对象以及json
数据的存储
高伸缩性的场景
大尺寸,低价值的数据存储 - 不适用:
高度事务
传统的商业智能应用
复杂的多表查询
- 文件存储格式:
查询
MongoDB
查询数据的语法格式如下:
db.collection.find(query, projection)
query
:可选,使用查询操作符指定查询条件projection
:可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
如果你需要以易读的方式来读取数据,可以使用pretty()
方法,语法格式如下:
db.col.find().pretty()
返回当前集合数据项的总条数
db.col.find().count()
若不指定 projection
,则默认返回所有键,指定 projection
格式如下,有两种模式
db.collection.find(query, {title: 1, by: 1}) // inclusion模式 指定返回的键,不返回其他键db.collection.find(query, {title: 0, by: 0}) // exclusion模式 指定不返回的键,返回其他键
_id
键默认返回,需要主动指定 _id:0
才会隐藏
两种模式不可混用(因为这样的话无法推断其他键是否应返回)
db.collection.find(query, {title: 1, by: 0}) // 错误
只能全1
或全0
,除了在inclusion
模式时可以指定_id
为0
db.collection.find(query, {_id:0, title: 1, by: 1}) // 正确
排序
在MongoDB
中使用使用sort()
方法对数据进行排序。 sort()
方法可以通过参数指定排序的字段,并使用 1
和 -1
来指定排序的方式,其中 1
为升序排列,而-1
是用于降序排列。
Limit
与Skip
limit()
方法接受一个数字参数,该参数指定从MongoDB
中读取的记录条数。skip
方法同样接受一个数字参数作为跳过的记录条数。skip
和limit
结合就能实现分页。- 当查询时同时使用
sort
,skip
,limit
,无论位置先后,最先执行顺序sort
再skip
再limit
。 skip
和limit
方法只适合小数据量分页,如果是百万级效率就会非常低,因为skip
方法是一条条数据数过去的,建议使用where_limit
。SQL
分页的后一种时间戳分页方案,这种利用字段的有序性质,利用查询来取数据的方式,可以直接避免掉了大量的数数。也就是说,如果能附带上这样的条件那查询效率就会提高。
这里我们假设查询第100001
条数据,这条数据的Amount
值是:2399927
,我们来写两条语句分别如下:
b.test.sort({"amount":1}).skip(100000).limit(10) //183msdb.test.find({amount:{$gt:2399927}}).sort({"amount":1}).limit(10) //53ms
实验结果印证了Skip
效率差的理论。
更新
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
:可选,抛出异常的级别。
当不使用$set
操作符时,update()
第二个对象将全部覆盖第一个对象(不包括_id
)
// {"_id":2,"x":1,"y":33,"z":98}update({x:1},{y:3})
这样新的集合将会变为{"_id":2,"y":3}
删除
删除文档
remove()
方法已经过时了,现在官方推荐使用 deleteOne()
和 deleteMany()
方法。
- 如删除集合下全部文档:
db.inventory.deleteMany({})
- 删除 status 等于 A 的全部文档:
db.inventory.deleteMany({ status : "A" })
- 删除 status 等于 D 的一个文档:
db.inventory.deleteOne( { status: "D" } )
删除集合
db.collection.drop()
删除数据库
db.dropDatabase()
显示
显示数据库
show dbs
显示集合
show tablesshow collections
插入
插入文档你也可以使用 db.col.save(document)
命令。如果不指定_id
字段 save()
方法类似于insert()
方法。如果指定_id
字段,则会更新该_id
的数据。
3.2 版本后还有以下几种语法可用于插入文档:
db.collection.insertOne()
:向指定集合中插入一条文档数据db.collection.insertMany()
:向指定集合中插入多条文档数据
// 插入单条数据> var document = db.collection.insertOne({"a": 3})> document{ "acknowledged" : true, "insertedId" : ObjectId("571a218011a82a1d94c02333")}// 插入多条数据> var res = db.collection.insertMany([{"b": 3}, {'c': 4}])> res{ "acknowledged" : true, "insertedIds" : [ ObjectId("571a22a911a82a1d94c02337"), ObjectId("571a22a911a82a1d94c02338") ]}
- 使用js语法插入多条数据:
for(i=2;i<100;i++)db.test01_collection.insert({x:i})
阅读全文
0 0
- mongoDB的基本使用
- mongoDb的基本使用
- MongoDB的基本使用
- MongoDB 的基本使用
- MongoDB的基本使用
- MongoDB的基本使用
- MongoDB的基本使用
- MongoDB笔记3:MongoDB的基本使用
- MongoDB的基本使用命令
- mongoDB的基本使用----飞天博客
- MongoDB的基本使用(二)
- MongoDB的C#驱动基本使用
- ubuntu下mongodb的基本使用
- MongoDB的安装与基本使用
- MongoDB的安装与基本使用
- MongoDB学习3——mongoDB的一些基本使用
- MongoDB基础学习一 ---- MongoDB的基本使用
- MongoDB基本使用
- caffe编译 `make pytest` 出错:`fatal error: 'pyconfig.h' file not found`
- android之微信分享音频
- 代码规范 : 集合处理
- Resource Acquisition Is Initialization(RAII)
- 3.Longest Substring Without Repeating Characters
- MongoDB的基本使用
- poj 2236
- 南阳oj S + T
- R之箱线图
- 设计模式知识连载(26)---模板方法模式:
- c++派生类与继承
- 生活习惯
- HTTP协议
- ubuntu 16.04 theano gpu