数据库的基本操作
use db_name
创建数据库
db
查看当前连接的数据库
show dbs
显示所有数据库,不显示空数据库
db.dropDatabase()
删除当前数据库
集合的基本操作
show collections
显示所有集合
db.collection_name.drop()
删除集合
db.createCollection(name,args)
创建集合并使用args作为初始文档
db.GPA.insert([
... {
... name:"王威龙",
... email:"wangweilong1996@gmail.com"
... }])
向集合GPA中插入数据
db.GPA.save([ { name:"王威龙1",
email:"wangweilong1996@gmail.com" }])
插入数据中,如果GPA集合不存在会自动创建
doc=({key:value,key:[{key:value,key:value}]})
db.collection_name.insert(doc)
插入预定义文档
数据查询
db.GPA.find({"name":"王威龙"}).pretty()
输出集合中符合参数的数据
db.collection_name.find()
不带参数返回集合中所有数据
db.collection_name.find().pretty()
使输出结果更美观
db.collection_name.find({key1:value1,key2:value2})
当参数中有多个键值对即视为AND查询操作
db.collection_name.find( { $or: [ {key1:value1} , {key2:value2} ] })
OR查询操作
db.collection_name.find({key1:value1, $or: [ {key2:value2},{key3:value3} ] })
OR AND 联立查询
key: {$gt:10}
key对应的value 大于 10
数据修改
db.collection_name.update({{key:value},{$set: {key1:value1}}},options)
更新键值对,option可为{multi:true},修改集合中的所有文档
db.collection_name.save({_id:Objectid,new_data})
替换已存在的文档
db.collection_name.remove({key_value})
删除符合条件的数据
条件操作符
$gt:1
大于1
值 | 说明 |
---|---|
$gt | 大于 |
$lt | 小于 |
$lte | 小于等于 |
$gte | 大于等于 |
$ne | 不等于 |
$type
* 双精度型-1
* 字符串-2
* 对象-3
* 数组-4
* 二进制数据-5
* 对象ID-7
* 布尔类型-8
* 数据-9
* 空-10
* 正则表达式-11
* JS代码-13
* 符号-14
* 有作用域的JS代码-15
* 32位整型数-16
* 时间戳-17
* 64位整型数-18
* Min key-255
* Max key-127
限制语句
db.collection_name.find().limit(n)
只读取查找到的前n个记录
db.collection_name.find().skip(n)
忽略读取到的前n条
db.collection_name.find().sort({key:1|-1})
对结果排序,1表示升序排列,-1代表降序排列
索引-ensureIndex()
db.collection_name.ensureIndex({key:value},options)
建立索引,option参数如下
参数 | 类型 | 描述 |
---|---|---|
background | Boolean | 建立索引要不要阻塞其他数据库操作,默认为false |
unique | Boolean | 建立的索引是否唯一,默认false |
name | string | 索引的名称,若未指定,系统自动生成 |
dropDups | Boolean | 建立唯一索引时,是否删除重复记录,默认flase |
sparse | Boolean | 对文档不存在的字段数据不启用索引,默认false |
expireAfterSeconds | integer | 设置集合的生存时间,单位为秒 |
v | index version | 索引的版本号 |
weights | document | 索引权重值,范围为1到99999 |
default-language | string | 默认为英语 |
language_override | string | 默认值为 language |
聚合
db.collection_name.aggregate({options})
options参数如下
* $match:查询,跟find一样;
* $limit:限制显示结果数量;
* $skip:忽略结果数量;
* $sort:排序;
* $group:按照给定表达式组合结果。
聚合表达式
名称 | 描述 |
---|---|
$sum | 计算总和 |
$avg | 计算平均值 |
$min和$max | 计算最小和最大值 |
$push | 在结果文档中插入值到一个数组 |
$addToSet | 在结果文档中插入值到一个数组,但不创建副本 |
$first | 根据资源文档的排序获取第一个文档数据 |
$last | 根据资源文档的排序获取最后一个文档数据 |
管道
$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
\$match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
$limit:用来限制MongoDB聚合管道返回的文档数。
$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
$group:将集合中的文档分组,可用于统计结果。
$sort:将输入文档排序后输出。
$geoNear:输出接近某一地理位置的有序文档。
原子操作
{$set:{field:value}}
指定一个键并更新键值,若不存在就创建
{$unset:{field:true}}
删除一个键
{$inc :{field:value}}
对文档的某个值为数字型的键进行增减操作
{$push:{field:value}}
把value追加到field,field一定是数组类型,如果field不存在,新增一个
{$pushAll:{field:value_array}}
同上,一次多值
{$pull:{field:value}}
从数组field中删除一个等于value的值
{$addToSet:{field:value}}
增加value到数组中
{$pop:{field:1}}
删除数组中的第一个或最后一个元素
{$rename:{old_name:new_name}}
修改字段名称
{$bit:{field:{and:5}}}
位操作
查询分析
explain()
提供查询信息使用索引和查询统计
结果中字段解释:
- indexOnly:为 true ,表示我们使用了索引;
- cursor:因为这个查询使用了索引,MongoDB中索引存储在B树结构中,所以这是也使用了BtreeCursor类型的游标。如果没有使用索引,游标的类型是BasicCursor。这个键还会给出你所使用的索引的名称,你通过这个名称可以查看当前数据库下的system.indexes集合(系统自动创建)来得到索引的详细信息;
- n:当前查询返回的文档数量;
- nscanned/nscannedObjects:表明当前这次查询一共扫描了集合中多少个文档,我们的目的是,让这个数值和返回文档的数量越接近越好;
- millis:当前查询所需时间,毫秒数;
- indexBounds:当前查询具体使用的索引。
hint()
强迫mongoDB使用一个指定的索引