资讯专栏INFORMATION COLUMN

MongoDB基础操作

Nekron / 1642人阅读

摘要:如果我们需要只去查询存在字段并且字段的值为的记录,需要配合操作。的对象和一些更新的操作符如等,也可以理解为查询内后面的可选,这个参数的意思是,如果不存在的记录,是否插入为插入,默认是,不插入。可选,抛出异常的级别。

更多内容欢迎来到博客 :https://imjianjian.github.io


MongoDB版本:3.4

查询文档

find()

查询所有
db.collection.find({})
db.collection.find()
文档查询
//查询name="jianjian"的所有文档
db.collection.find({"collection":"jianjian"})
条件操作符

$lt 小于

$gt 大于

$gte 大于等于

$lte 小于等于

$ne 不等于

$all 全包含

$in 包含

$nin 不包含

//查询年龄小于18的
db.collection.find("age":{$lt:"18"})
$all

必须满足所有值

//可以查询出来{age:[20,21,22]}但是查询不出来{age:[20,22,23]},即一定要有20和21.
db.collection.find({age:{$all:[20,21]}});
$in

这个与$all不一样,查询的值在$in给出的范围之内就都可以查出来。

//{age:[20,21,22]},{age:[20,22,23]}都能查出来
db.collection.find({age:{$in:[20,21]}});
$exists

判断key是否存在

判断age字段是否存在
db.collection.find({age:{$exists:true}});
null值的处理

null值处理需要注意的是,不仅仅可以查询出来某一字段值为null的记录,还可以查出来不存在某一字段的记录。

db.collection.find({age:null})

可以查询出来age为null的记录,以及没有age字段的记录。如果我们需要只去查询存在age字段并且age字段的值为null的记录,需要配合exists操作。

db.collection.find({age:{"$in":[null],"$exists":true}});
限制查询条数

limit(number)

number为条数

//查询条数限制为10条
db.collection.find().limit(10)
排序

sort({key:1})

key为需要排序的字段,升序为1,降序为-1

//按照年龄升序排序
db.collection.find().sort({"age":1})
跳过记录

skip()

查询第10到20条的记录
db.collection.find().skip(10).limit(10);
查询文档条数

count()

age大于25的条数
db.collection.find({age: {$gte: 25}}).count();
插入文档

insert()基本语法如下:

db.collection.insert(
   ,
   {
     writeConcern: ,
     ordered: 
   }
)
单条插入
db.collection.insert({"name":"jianjian"})
多条插入
db.collection.insert([{"name":"jianjian"},{"name":"dongdong"}])
错误的语法
db.collection.insert({"age":11},{"age":12})

只有age:11被插入进去,由于接收的插入文档不是数组

容易误导的地方:

db.collection.insert([{"name":"jianjian"},{"name":"dongdong"}])

db.collection.insert({"name":"jianjian"},{"age":"dongdong"})

db.collection.insert({"name":"jianjian","name":"dongdong"})

第一个插入是插入两个文档,第二个插入是插入一个文档,第三个虽然也是一个文档但是由于键重复,所以只有后一个值会被插入age:12

删除文档

remove() 方法的基本语法格式如下所示:

db.collection.remove(
   ,
   {
     justOne: ,
     writeConcern: 
   }

参数说明:

query :(可选)删除的文档的条件。

justOne : (可选)如果设为 true 或 1,则只删除一个文档。

writeConcern :(可选)抛出异常的级别。

删除num大于100的数据
db.new.remove({"num":{$gt:100}});
删除new集合所有数据
db.new.remove({});
删除num等于100的数据
db.new.remove({"num":100})
更新文档

update() 方法用于更新已存在的文档。语法格式如下:

db.collection.update(
   ,
   ,
   {
     upsert: ,
     multi: ,
     writeConcern: 
   }
)

参数说明:

query : update的查询条件,类似sql update查询内where后面的。

update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的

upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

writeConcern :可选,抛出异常的级别。

$set修改符

用于修改键的值,如果键不存在就增加键

//将age=10的数据改成15,默认如果age=10的有多条记录只更新第一条
db.collection.update({"name":"li"},{$set:{"age":10}})

//更新多个满足条件的值,同时如果更新的值不存在就插入更新的值,注意:这里插入的值是20不是30
db.collection.update({"age":30},{$set:{"age":20}},{multi:true,upsert:true})

可以省略multi,upsert,这里不能有花括号,但是不建议这样做
db.collection.update({"age":30},{$set:{"age":20}},true,true)

//值更新为数组
db.collection.update({"name":"zhang"},{$set:{"age":[10,
12,14]}},{upsert:true})

//修改为其它的值
db.collection.update({"name":"zhang"},{$set:{"age":""}},{upsert:true})
db.collection.update({"name":"zhang"},{$set:{"age":null}},{upsert:true})
$inc修改符

用于增加已有键的值,如果键不存在就创建,只能用于整形、长整型、浮点型。

//将name=zhang的记录的age键+10
db.collection.update({"name":"zhang"},{$inc:{"age":10}},{upsert:true})

//将name=zhang的记录的age键-10
db.collection.update({"name":"zhang"},{$inc:{"age":-10}},{upsert:true})
$unset修改符

删除键类似关系数据库的删除字段操作,要区别$set修改符的将键设空或者null值

db.collection.update({"name":"zhang"},{$unset:{"age":1}})
$push修改符

如果数组已经存在,“$push”会向已有的数组末尾加入一个元素,要是没有就创建一个新的数组。注意:必须是数组才能加入新的值

db.collection.update({"name":"zhang"},{$push:{"comments":{"email":"abc@qq.com","address":"beijing"}}});

//再插入一条comments
db.collection.update({"name":"zhang"},{$push:{"comments":{"mark":"aaa"}}});
$each修改符

向数组中添加元素

db.collection.insert({"title":1,"list":[1,2,3]})

//向list数组中添加单个元素
db.collection.update({"title":1},{$push:{"list":4}})

//向list数组中添加多个元素
db.collection.update({"title":1},{$push:{"list":{$each:[6,7]}}});
$addToSet修改符

往数组集中插入元素时,如果元素存在就不插入;方法和$push一样,唯一的区别就是$push不会判断重复值,重复也可以插入。$addToSet也可以结合$each一起使用方法和$push一样可以同时往数组中插入多个元素并且如果元素存在则不插入。

db.collection.update({"title":1},{$addToSet:{"list":2}})

db.collection.update({"title":1},{$addToSet:{"list":{$each:[2,3,4]}}});
$pull修改符

匹配数组中的元素将匹配上的元素全部删除,注意只能对数组中的元素进行匹配

db.collection.insert({"title":1,"list":[1,2,3]});

//清除list数组中的元素2
db.collection.update({},{$pull:{"list":2}})
$pop修改符

从数组的末端或头删除一个元素,$pop:{"list":1}:从末尾删除一个元素;$pop:{"list":-1}:从开头删除一个元素

//向数组list中插入两个元素
db.collection.update({},{$push:{"list":{$each:[2,4]}}});

//从末尾删除元素
db.collection.update({},{$pop:{"list":1}});

//从开头删除元素
db.collection.update({},{$pop:{"list":-1}});

基于位置的数组修改方法
可以有两种方式来定位数组中的元素:

1.通过下标;数组的下标都是从0开始。

2.通过$定位操作符,

db.comment.insert({"title":1,"comments":[{"comment":"a","author":"chen","age":10},{"comment":"b","author":"wang","age":30},{"comment":"c","author":"zhang","age":40}]});
//将数组中的第一个列表的age值改成20
//方法1:
db.comment.update({},{$set:{"comments.0.age":20}});

//方法2:
db.comment.update({"comments.author":"chen"},{$set:{"comments.$.age":20}});
索引

索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。

这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。

索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构

ensureIndex() 方法

MongoDB使用 ensureIndex() 方法来创建索引。

设置No为索引:

db.collection.ensureIndex({"No":1})
1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可。
删除集合

删除test集合,注意drop后面的括号里面不需要带花括号

db.test.drop()

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/19181.html

相关文章

  • MongoDB指南---3、MongoDB基础知识-数据类型

    摘要:如将构造函数作为函数进行调用即不包括的方式,返回的是日期的字符串表示,而非日期对象。如果不注意这一点,没有始终使用日期构造函数,将得到一堆混乱的日期对象和日期的字符串。关于日期类的完整解释,以及构造函数的参数格式,参见规范节。 上一篇文章:MongoDB指南---2、MongoDB基础知识-文档、集合、数据库、客户端下一篇文章:MongoDB指南---4、MongoDB基础知识-使用M...

    aervon 评论0 收藏0
  • MongoDB指南---3、MongoDB基础知识-数据类型

    摘要:如将构造函数作为函数进行调用即不包括的方式,返回的是日期的字符串表示,而非日期对象。如果不注意这一点,没有始终使用日期构造函数,将得到一堆混乱的日期对象和日期的字符串。关于日期类的完整解释,以及构造函数的参数格式,参见规范节。 上一篇文章:MongoDB指南---2、MongoDB基础知识-文档、集合、数据库、客户端下一篇文章:MongoDB指南---4、MongoDB基础知识-使用M...

    tunny 评论0 收藏0
  • 《聊聊mongodb》系列二 mongoDB存储结构以及基础的shell命令

    摘要:进入数据库,然后查看拥有的集合查看当前操作的数据库,以及数据库版本,连接及端口号以下部分为创建数据库,我们刚创建的数据库并不在数据库的列表中,要显示它,我们需要向数据库插入一些数据。 跟着上一节,我们简单了解了下,什么是mongoDB? 这一节,我们简单的了解下mongodb的存储结构以及基础的shell命令。 一、mongodb的存储结构 接触mongodb之前,我们使用的都是关系型...

    Jacendfeng 评论0 收藏0
  • 《聊聊mongodb》系列三 了解一下MongoDB插入文档的操作

    摘要:布尔类型,表示文档是否按照有序或者无序插入,默认是返回参数返回了含有操作状态的对象插入文档成功返回如下对象字段指明了插入文档的总数如果该操作遇到了错误对象将包含该错误信息例子四其它可以向集合中添加文档的方法和选项一起使用的。 上一节介绍了MongoDB的基本的命令,以及结构的了解,这一节的主题是介绍一下MongoDB的插入文档的操作的基础命令的使用,MongoDB当中文档的数据结构和j...

    ityouknow 评论0 收藏0
  • MongoDB指南---2、MongoDB基础知识-文档、集合、数据库、客户端

    摘要:上一篇文章指南简介下一篇文章指南基础知识数据类型非常强大但很容易上手。把同种类型的文档放在一个集合里,数据会更加集中。命名集合使用名称进行标识。集合名不能是空字符串。简单起见,数据库名应全部小写。 上一篇文章:MongoDB指南---1、MongoDB简介下一篇文章:MongoDB指南---3、MongoDB基础知识-数据类型 MongoDB非常强大但很容易上手。本章会介绍一些Mon...

    SnaiLiu 评论0 收藏0
  • MongoDB指南---2、MongoDB基础知识-文档、集合、数据库、客户端

    摘要:上一篇文章指南简介下一篇文章指南基础知识数据类型非常强大但很容易上手。把同种类型的文档放在一个集合里,数据会更加集中。命名集合使用名称进行标识。集合名不能是空字符串。简单起见,数据库名应全部小写。 上一篇文章:MongoDB指南---1、MongoDB简介下一篇文章:MongoDB指南---3、MongoDB基础知识-数据类型 MongoDB非常强大但很容易上手。本章会介绍一些Mon...

    W4n9Hu1 评论0 收藏0

发表评论

0条评论

Nekron

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<