MongoDB常用操作

数据库的基本操作

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使用一个指定的索引

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容