创建、删除数据库
格式
use DATABASE_NAME
如果不存在,则创建,否则直接切换到该数据库
显示当前所在的数据库
db
显示所有数据库
show dbs
删除数据库
db.dropDatabase()
例子
> show dbs
admin .078GB
db_log .953GB
local .078GB
test .078GB
> use del_db
switched to db del_db
> db.col.insert({x:})
WriteResult({ "nInserted" : })
> show dbs
admin .078GB
db_log .953GB
del_db .078GB
local .078GB
test .078GB
> db
del_db
> db.dropDatabase()
{ "dropped" : "del_db", "ok" : }
插入文档
文档的数据结构和json基本一致
所有存储在集合中都是BSON格式
BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON
>db.col.insert({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes:
})
删除文档
语法
db.collection.remove(
<query>,
<justOne>
)
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档。
对比
- 删除集合中的所有文档(保留集合):db.col.remove({})
- 删除集合:db.col.drop()
案例
> db.col.find()
{ "_id" : ObjectId("56c55cf5ca446fab71e4c382"), "x" : }
{ "_id" : ObjectId("56c55cf6ca446fab71e4c383"), "x" : }
{ "_id" : ObjectId("56c55cffca446fab71e4c384"), "x" : } > db.col.remove({x:}, )
WriteResult({ "nRemoved" : })
> db.col.find()
{ "_id" : ObjectId("56c55cf6ca446fab71e4c383"), "x" : }
{ "_id" : ObjectId("56c55cffca446fab71e4c384"), "x" : } > db.col.remove({x:})
WriteResult({ "nRemoved" : })
> db.col.find()
查询文档
读取格式:db.COL_NAME.find()
以易读的方式读取:db.COL_NAME.find().pretty()
只读一个文档:db.COL_NAME.findOne()
AND条件
db.col.find({key1:value1, key2:value2})
OR条件
db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
)
条件查询
案例:
x>1 & (y=3 or y = 4)
db.col.find(
{
x:{$gt:},
$or:[
{y:},{y:}
]
}
)
$type操作符
$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果
示例
> db.col.find()
{ "_id" : ObjectId("56c562c1ca446fab71e4c387"), "x" : , "y" : }
{ "_id" : ObjectId("56c562c8ca446fab71e4c388"), "x" : , "y" : }
{ "_id" : ObjectId("56c568a8b708aa3d13c61cc6"), "x" : "aaa" }
> db.col.find({x:{$type:}})
{ "_id" : ObjectId("56c568a8b708aa3d13c61cc6"), "x" : "aaa" }
> db.col.find({x:{$type:}})
{ "_id" : ObjectId("56c562c1ca446fab71e4c387"), "x" : , "y" : }
{ "_id" : ObjectId("56c562c8ca446fab71e4c388"), "x" : , "y" : }
limit(n)与skip(n)方法
limit显示前n条文档
skip调到第n条文档开始显示
示例
> db.col.find()
{ "_id" : ObjectId("56c562c1ca446fab71e4c387"), "x" : , "y" : }
{ "_id" : ObjectId("56c562c8ca446fab71e4c388"), "x" : , "y" : }
{ "_id" : ObjectId("56c568a8b708aa3d13c61cc6"), "x" : "aaa" } > db.col.find().limit()
{ "_id" : ObjectId("56c562c1ca446fab71e4c387"), "x" : , "y" : }
{ "_id" : ObjectId("56c562c8ca446fab71e4c388"), "x" : , "y" : } > db.col.find().skip()
{ "_id" : ObjectId("56c562c8ca446fab71e4c388"), "x" : , "y" : }
{ "_id" : ObjectId("56c568a8b708aa3d13c61cc6"), "x" : "aaa" } > db.col.find().skip().limit()
{ "_id" : ObjectId("56c562c8ca446fab71e4c388"), "x" : , "y" : }
排序
格式:
db.COL_NAME.find().sort({KEY:})
KEY对应的值:1(升序),-1(降序)
示例:
> db.col.find()
{ "_id" : ObjectId("56c56dd4ca446fab71e4c38a"), "x" : , "y" : }
{ "_id" : ObjectId("56c572c2ca446fab71e4c38b"), "x" : , "y" : }
{ "_id" : ObjectId("56c572c8ca446fab71e4c38c"), "x" : , "y" : } > db.col.find().sort({x:})
{ "_id" : ObjectId("56c56dd4ca446fab71e4c38a"), "x" : , "y" : }
{ "_id" : ObjectId("56c572c2ca446fab71e4c38b"), "x" : , "y" : }
{ "_id" : ObjectId("56c572c8ca446fab71e4c38c"), "x" : , "y" : } > db.col.find().sort({x:-})
{ "_id" : ObjectId("56c572c8ca446fab71e4c38c"), "x" : , "y" : }
{ "_id" : ObjectId("56c572c2ca446fab71e4c38b"), "x" : , "y" : }
{ "_id" : ObjectId("56c56dd4ca446fab71e4c38a"), "x" : , "y" : }
索引
如果没有索引,MongoDB读取文件时,首先扫描整个文件从中找到符合条件的记录。查询效率巨低!
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构
语法格式
db.COLLECTION_NAME.ensureIndex({KEY:})
KEY值是要创建的索引字段,1为指定按升序建索引,-1是指定按降序建索引。
> db.col.ensureIndex({y:})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : ,
"numIndexesAfter" : ,
"ok" :
}
聚合
聚合主要用来处理数据(如平均值、求和等),并返回计算后的数据结果
语法格式
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
复制
mongodb各个节点常见的搭配方式为:一主一从、一主多从。
主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。
原理
副本集特征
- N 个节点的集群
- 任何节点可作为主节点
- 所有写入操作都在主节点上
- 自动故障转移
- 自动恢复