mongodb学习之:文档操作
在上一章中有讲到文档的插入操作是用insert的方法。如果该集合不在该数据库中,mongodb会自动创建该集合并插入文档
用find的方法可以查找所有的集合数据
> db.maple.find()
{ "_id" : ObjectId("5a35d6278ef76f6d57aae92c"), "name" : "zhf"
也可以将数据定义为一个变量:
document=({“name”:”zhf”})
db.maple.insert(document)
文档更新:
MongoDB 使用 update() 和 save() 方法来更新集合中的文档
参数说明:
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。
db.maple.update({"name":"zhf"},{"$set":{"name":"zhanghongfeng"}})
还可以采用运算符的方式来进行判断
> db.maple.update({"age":{"$eq":35}},{"$set":{"city":"chengdu"}})
#找到年龄等于35的文档并将城市设置为chengdu
> db.maple.update({"city":"chengdu"},{"$inc":{"age":1}})
#找到城市为chengdu的文档并将age加1
> db.maple.update({"city":"chengdu"},{"$inc":{"age":-1}})
#找到城市为chengdu的文档并将age减1
#unset:删除某个字段
> db.maple.update({"age":35},{$unset:{"programming":1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.maple.find()
{ "_id" : ObjectId("5a35d6278ef76f6d57aae92c"), "name" : "zhanghongfeng_maple" }
{ "_id" : ObjectId("5a35d7ce8ef76f6d57aae92d"), "age" : 35, "city" : "chongqing" }
{ "_id" : ObjectId("5a35d8548ef76f6d57aae92e"), "favorite" : "basketball" }
{ "_id" : ObjectId("5a3611de366b42e0050debd8"), "coding" : [ "C", "python", "Go", "Java" ] }
$push操作:把value追加到field里面去,field一定要是数组类型才行,如果field不存在,会新增一个数组类型加进去
> db.maple.update({"age":35},{$push:{"programming":"javascript"}})
> db.maple.find()
{ "_id" : ObjectId("5a35d6278ef76f6d57aae92c"), "name" : "zhanghongfeng_maple" }
{ "_id" : ObjectId("5a35d7ce8ef76f6d57aae92d"), "age" : 35, "city" : "chongqing", "programming" : [ "javascript" ] }
{ "_id" : ObjectId("5a35d8548ef76f6d57aae92e"), "favorite" : "basketball" }
{ "_id" : ObjectId("5a3611de366b42e0050debd8"), "coding" : [ "C", "python", "Go", "Java" ] }
#当数组不存在的时候会新增一个数组
> db.maple.update({"age":35},{$push:{"programming":"mysql"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.maple.find()
{ "_id" : ObjectId("5a35d6278ef76f6d57aae92c"), "name" : "zhanghongfeng_maple" }
{ "_id" : ObjectId("5a35d7ce8ef76f6d57aae92d"), "age" : 35, "city" : "chongqing", "programming" : [ "javascript", "mysql" ] }
{ "_id" : ObjectId("5a35d8548ef76f6d57aae92e"), "favorite" : "basketball" }
{ "_id" : ObjectId("5a3611de366b42e0050debd8"), "coding" : [ "C", "python", "Go", "Java" ] }
#已存在的情况下则会继续往数组里面添加数据
> db.maple.update({"age":35},{$pushAll:{"programming":["object-c","HTML"]}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.maple.find()
{ "_id" : ObjectId("5a35d6278ef76f6d57aae92c"), "name" : "zhanghongfeng_maple" }
{ "_id" : ObjectId("5a35d7ce8ef76f6d57aae92d"), "age" : 35, "city" : "chongqing", "programming" : [ "javascript", "mysql", [ "mongodb", "linux" ], "object-c", "HTML" ] }
{ "_id" : ObjectId("5a35d8548ef76f6d57aae92e"), "favorite" : "basketball" }
{ "_id" : ObjectId("5a3611de366b42e0050debd8"), "coding" : [ "C", "python", "Go", "Java" ] }
#添加多个数据到数组中采用pushAll的方式
#addToSet
只有在数组中不存在的时候才添加:
> db.maple.update({"age":35},{$addToSet:{"programming":"mysql"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
#pop
删除第一个和最后一个元素
> db.maple.update({"age":35},{$pop:{"programming":1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.maple.update({"age":35},{$pop:{"programming":-1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
#pull:删除特定的元素
> db.maple.update({"age":35},{$pull:{"programming":"object-c"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
文档查找:
我们用关系数据库中的对比来看下:
db.maple.find() 相当于select * from maple
db.maple.find({"age":27}) 相当于select * from maple where age='27'
db.maple.find({"age":27,"name":"xing"}) 相当于select * from maple where age='27' and name="xing"
db.maple.find({},{"name":1}) select name from maple,如果name:0则是不显示name字段
db.maple.find().limit(1) 相当于select * from maple limit 1
db.maple.find().sort({_id:-1}).limit(1)相当于select * from maple order by _id desc limit 1
db.maple.find({"age":{"$in",[12,34,100]}}) 相当于select * from maple where age in (12,3,100)
db.maple.find({"age ":{"$nin",[12,3,100]}}) 相当于select * from maple where _id not in (12,3,100)
db.maple.find({"$or":[{"age":16},{"name":"xing"}]}) 相当于select * from blog where age = 16 or name = 'xing'
db.maple.find({"id_num":{"$mod":[5,1]}}) 取的是id_num mod 5 = 1 的字段,如id_num=1,6,11,16
db.maple.find({"id_num":{"$not":{"$mod":[5,1]}}}) 取的是id_num mod 5 != 1 的字段,如除了id_num=1,6,11,16等所有字段,多于正则一起用
$exists判断字段是否存在
db.blog.find({ “name” : { $exists : true }}); // 如果存在元素name,就返回
db.blog.find({ “name” : { $exists : false }}); // 如果不存在元素name,就返回
#查询数组:
db.blog.find({"coding":{"$size":4}}) coding数组长度为3的符合结果
db.blog.find({"coding":{"$all":["C", "python", "Go", "Java" ]}}) fruit中必需有数组中的每一个才符合结果
mongodb学习之:文档操作的更多相关文章
- MongoDB学习笔记——文档操作之查询
查询文档 使用db.COLLECTION_NAME.findOne()可以查询所有满足条件的第一条数据 预发格式如下: db.COLLECTION_NAME.findOne(<query> ...
- MongoDB学习笔记——文档操作之增删改
插入文档 使用db.COLLECTION_NAME.insert() 或 db.COLLECTION_NAME.save() 方法向集合中插入文档 db.users.insert( { user_id ...
- MongoDB 集合与文档操作
一.创建DB 1.查看DB >show dbs 2.创建DB >use mydb 3.查看当前DB >db 4.删除DB >use mydb >db.dropDataba ...
- MongoDB内嵌文档操作
实体定义: [BsonIgnoreExtraElements] public class Person : BaseEntity { public string FirstName { get; se ...
- MongoDB系列---集合与文档操作03
MongoDB-——Collection 学习大纲: 1.集合操作 2.文档操作 知识回顾: 上一篇我们讲述了如何对MongoDB的权限和用户进行日常的基本操作,来达到我们对数据库的基本安全保障. 一 ...
- MongoDB入门---文档操作之增删改
之前的两篇文章,已经分享过关于MongoDB的集合还有数据库的各种操作,接下来就涉及到最主要的喽,那就是数据方面的操作,在这里叫做文档操作.话不多说,大家来看正文. 首先来看一下它的数据结构: ...
- mongodb安装,库操作,集合操作(表),文档操作(记录)
安装 1.下载地址 https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-4.0.8-signed.msi 2.如果报没 ...
- MongoDB数据库文档操作
前面的话 本文将详细介绍MongoDB数据库关于文档的增删改查 数据类型 在介绍文档操作之前,首先要了解MongoDB的数据类型 MongoDB支持许多数据类型,包括 1.字符串 - 这是用于存储数据 ...
- Mongoose学习参考文档——基础篇
Mongoose学习参考文档 前言:本学习参考文档仅供参考,如有问题,师请雅正 一.快速通道 1.1 名词解释 Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model ...
- SpringMVC MongoDB之“基本文档查询(Query、BasicQuery)”
一.简介 spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我 ...
随机推荐
- 共享内存之——mmap内存映射
共享内存允许两个或多个进程共享一给定的存储区,因为数据不需要来回复制,所以是最快的一种进程间通信机制.共享内存可以通过mmap()映射普通文件 (特殊情况下还可以采用匿名映射)机制实现,也可以通过sy ...
- Python学习笔记2_一些小程序
counts = [98,12,3,4,1,4,9,3821] minNum = min(counts) #print minNum minNum_index = counts.index(minNu ...
- 问题:Linux 输入任何命令都显示 -bash: fork: Cannot allocate memory
应该是某个程序吃掉了所有的内存,只能重启
- react native ios启动指定模拟器
react-native run-ios --simulator "iPhone 7 Plus” xcrun instruments -w 'iPhone X'
- 线程池之ThreadPoolExecutor线程池源码分析笔记
1.线程池的作用 一方面当执行大量异步任务时候线程池能够提供较好的性能,在不使用线程池的时候,每当需要执行异步任务时候是直接 new 一线程进行运行,而线程的创建和销毁是需要开销的.使用线程池时候,线 ...
- UVALive 5135 Mining Your Own Business 双连通分量
据说这是一道Word Final的题,Orz... 原题链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&a ...
- 【UTR #2】题目排列顺序
题目描述 "又要出题了." 宇宙出题中心主任 -- 吉米多出题斯基,坐在办公桌前策划即将到来的 UOI. 这场比赛有 $n$ 道题,吉米多出题斯基需要决定这些题目的难度,然后再在汪 ...
- Tavas and Malekas
题面 题目描述 给你两个字符串a和b,告诉所有你b在a中一定匹配的位置,求有中不同的字符串a.a的长度为n,b的长度为m,一定匹配的位置有p个.若b在a中的一定匹配的位置为x,说明a[x-x+m-1] ...
- MySQL中limit使用动态参数的解决方法(拼接SQL字符串语句来执行SQL)
官方好像说过limit已经在5.6版本上支持了动态参数,但是测试时依然还是不行. 那么要解决limit动态参数唯一能做的就是使用字符串SQL拼接的形式,然后再进行执行. 一般有以下方式解决: 1.存储 ...
- 使用python一步一步搭建微信公众平台
https://my.oschina.net/yangyanxing/blog/159215 http://www.ziqiangxuetang.com/django/python-django-we ...