MongoDB
MongoDB SQL
数据库
创建/转换数据库
- 默认使用test
- 使用该命令后,在集合或数据库后插入数据才开始真正创建数据库
use <DATABASE_NAME>
查看所有数据库
show dbs
显示当前使用的数据库
db
删除当前数据库
db.dropDatabase()
{ "dropped" : "test", "ok" : 1 }
集合
创建集合(插入文档时会自动创建集合)
- collection_name:集合名称
- options: 可选参数, 指定有关内存大小及索引的选项
- capped(Boolean):(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数。
- autoIndexId(Boolean):(可选),如为 true,"id"自动创建索引,默认false。
- size 数值 (可选)为固定集合指定一个最大值,以千字节计(KB)。如果 capped 为 true,必须指定该字段。
- max 数值 (可选)指定固定集合中包含文档的最大数量。
在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。
db.createCollection(collection_name, options)
带参示例:
db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )
查看当前数据库下已有集合
show collections
删除指定集合
db.<collection_name>.drop()
文档
插入文档
db.<COLLECTION_NAME>.insert(document)
db.<COLLECTION_NAME>.save(document)
查看文档
- query :可选,使用查询操作符指定查询条件
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
db.<COLLECTION_NAME>.find(query, projection)
只返回一个文档
db.<COLLECTION_NAME>.findOne(query, projection)
pretty() 方法以格式化的方式来显示所有文档。
db.<COLLECTION_NAME>.find().pretty()
AND
db.<COLLECTION_NAME>.find({key1:value1,key2:value2}).pretty()
OR
db.<COLLECTION_NAME>.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
AND OR
db.<COLLECTION_NAME>.find(
{key1:value1,key2:value2},
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
按照类型查询 获取 title 为 String 的数据
db.<COLLECTION_NAME>.find({"title" : {$type : 'string'}})
获取指定条数数据
db.<COLLECTION_NAME>.find().limit(NUMBER)
跳过指定条数数据
db.<COLLECTION_NAME>.find().skip(NUMBER)
排序
1 升序
-1 降序
db.<COLLECTION_NAME>.find().sort({KEY:1})
TIPS:skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()。
如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:
操作 | 格式 | 范例 | RDBMS中的类似语句 |
---|---|---|---|
等于 | {:} | db.col.find({“by”:“value”}).pretty() | where by = ‘value’ |
小于 | {:{$lt:}} | db.col.find({“likes”:{$lt:50}}).pretty() | where likes < 50 |
小于或等于 | {:{$lte:}} | db.col.find({“likes”:{$lte:50}}).pretty() | where likes <= 50 |
大于 | {:{$gt:}} | db.col.find({“likes”:{$gt:50}}).pretty() | where likes > 50 |
大于或等于 | {:{$gte:}} | db.col.find({“likes”:{$gte:50}}).pretty() | where likes >= 50 |
不等于 | {:{$ne:}} | db.col.find({“likes”:{$ne:50}}).pretty() | where likes != 50 |
更新文档
- query : update的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的操作符(如 , , ,inc…)等,也可以理解为sql update查询内set后面的
- upsert : (可选),这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi : (可选),mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :(可选),抛出异常的级别。
db.<COLLECTION_NAME>.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
eg:
只修改第一个符格条件的
db.<COLLECTION_NAME>.update({'dbName':'MongoDB'},{$set:{'dbName':'Mongodb'}})
修改多条
db.<COLLECTION_NAME>.update({'dbName':'MongoDB'},{$set:{'dbName':'Mongodb'}}),{multi:true})
只更新第一条记录:
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 );
删除文档
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
- writeConcern :(可选)抛出异常的级别。
db.<COLLECTION_NAME>.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
索引
创建索引
db.<COLLECTION_NAME>.createIndex(keys, options)
单值索引
db.col.createIndex({"title":1})
复合索引
db.col.createIndex({"title":1,"description":-1})
keys:需要创建索引的字段
options:1升序,-1降序
查看集合索引
db.<COLLECTION_NAME>.getIndexes()
查看集合索引大小
db.<COLLECTION_NAME>.totalIndexSize()
删除集合所有索引
db.<COLLECTION_NAME>.dropIndexes()
删除指定索引
db.<COLLECTION_NAME>.dropIndexes("索引名称")
聚合函数
count()
集合中文档的数量
db.<COLLECTION_NAME>.count()
带有条件的
db.<COLLECTION_NAME>.count()
or
db.<COLLECTION_NAME>.find({}).count()
distinct()
返回指定字段下所有值的去重结果
db.<COLLECTION_NAME>.distinct(keys)