问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何修改MONGODB字段的数组,不用整个字段修改

发布网友 发布时间:2022-04-30 04:00

我来回答

3个回答

懂视网 时间:2022-04-30 08:22

mongoDB入门需要了解的基本知识

2MongoDB入门教程(包含安装、常用命令、相关概念、使用技巧、常见操作等)

3MongoDB入门教程之分片技术详解

4MongoDB入门教程之常用的运维技术介绍

5MongoDB入门教程之C#驱动操作实例

6MongoDB入门教程之主从复制配置详解

7MongoDB入门教程之聚合和游标操作介绍

8MongoDB入门教程之细说MongoDB数据库的增删查改操作

9MongoDB入门教程之索引操作浅析

10MongoDB入门教程之Windows下的MongoDB数据库安装图解

11MongoDB查询字段没有创建索引导致的连接超时异常解案例分享

12MongoDB日志文件过大的解决方法

13MongoDB社区版和企业版的差别对照表

14MongoDB中文社区发起人带你学习mongoDB

15对MongoDB数据库性能瓶颈分析

16MongoDB 分页查询的方法及性能

17MongoDB分片存储的集群架构实现

18Mongodb批量删除gridfs文件实例

19Mongodb增加、移除Shard Server实例

20Mongodb增加、移除Arbiter节点实例

21CentOS系统下MongoDB安装及配置教程

22MongoDB修改、删除文档的域属性实例

23Python中的MongoDB基本操作:连接、查询实例

24MongoDB导出查询结果到文件例子

25MongoDB中创建索引需要注意的事项

26MongoDB中的一些坑(最好不要用)

27给MongoDB添加用户权限方法分享

28Linux系统下MongoDB的简单安装与基本操作

29MongoDB教程之基本管理命令

30MongoDB教程之聚合(count、distinct和group)

31MongoDB教程之索引介绍

32MongoDB教程之数据操作实例

33MongoDB教程之入门基础知识

34MongoDB教程之查询操作实例

35MongoDB系列教程(四):设置用户访问权限

36MongoDB系列教程(八):GridFS存储详解

37MongoDB数据库的特色和优点介绍

38MongoDB简介 MongoDB五大特色

39MongoDB系列教程(六):java操作mongodb实例

40MongoDB系列教程(七):MongoDb数据结构详解

41MongoDB系列教程(五):mongo语法和mysql语法对比学习

42MongoDB系列教程(二):MongoDB简介

43MongoDB系列教程(一):NoSQL起源

44MongoDB中的MapReduce简介

45MongoDB系列教程(三):Windows中下载和安装MongoDB

46浅谈MongoDB的备份方式

47MongoDB 常用命令总结

48MongoDB与MySQL的操作对比表及区别介绍

49MongoDB安全配置详解

50MongoDB中的bson介绍和使用实例


版权声明:本文为博主原创文章,未经博主允许不得转载。

MongoDB修改、删除文档的域属性实例

标签:mongodb   数据库   

热心网友 时间:2022-04-30 05:30

很好的一点就是,数据库不需要先建立,在连接后,如果进行插入数据操作,系统可以自己创建,我们假设一个post集合,里面是一些博客文章组成的文档。下面先插入几篇文章做实验。
1 >>> import datetime 2 >>> post1 = {"title":"I Love Python", 3 "slug":"i-love-python", 4 "author":"SErHo", 5 "content":"I Love Python....", 6 "tags":["Love","Python"], 7 "time":datetime.datetime.now()} 8 9 >>> post2 = {"title":"Python and MongoDB", 10 "slug":"python-mongodb", 11 "author":"SErHo", 12 "content":"Python and MongoDB....", 13 "tags":["Python","MongoDB"], 14 "time":datetime.datetime.now()} 15 16 >>> post3 = {"title":"SErHo Blog", 17 "slug":"serho-blog", 18 "author":"Akio", 19 "content":"SErHo Blog is OK....", 20 "tags":["SErHo","Blog"], 21 "time":datetime.datetime.now()} 22 23 >>> posts.insert(post1) 24 >>> posts.insert(post2) 25 >>> posts.insert(post3)

在插入一个文档时,MongoDB会自动给每个文档增加一个”_id”的键,这个键是通过复杂计算出来的,不会重复,类似于下面这样的:
1 ObjectId('4ea0207dd483050fe8000001')

增加数据就是这样的简单,不需要事先定义文档的机构,每个文档的结构也可以不一样,上面我举的例子是一样的,这可以根据实际需求来设置,我这个是为了好讲解下面的。插入过后,肯定最先的是查询,下面查询出post集合里面的所有文档:
1 >>> posts = posts.find() 2 >>> count = posts.count() 3 >>> for post in posts: 4 print post

数据库使用游标来返回find的结果,游标上有多种方法,比如上面的count(),就可以得到查询到的文档总数。这个例子将返回”count=3″和上面的那三篇文档。更多查询方法在后面将讲解,这些方法更加强大。
插入过后可能发现需要修改,于是下面讲解一些修改的方法。如果需要大幅度的修改,什么是大幅度的修改呢,比如把post1的title,slug,author等都修改了,我的理解就是大于一个键的修改就叫大幅修改。修改一个东西,你得先找到他,所以查询方法就很重要了,不幸的是,这个准备后面才将。我们先随便查找一个来修改吧。
1 >>> post = posts.find_one({"slug":"python-mongodb"}) 2 >>> post["author"] 3 u'SErHo' 4 >>> post["author"] = "HaHa Lu" 5 >>> post["title"] = "Test Update" 6 >>> post["title"] = "Test Update" 7 >>> post["_id"] 8 ObjectId('4ea0207dd483050fe8000001') 9 >>> posts.update({"_id":post["_id"]},post) 10 >>> post = posts.find_one({"_id":post["_id"]}) 11 >>> print post 12 {u'author': u'HaHa Lu', u'title': u'Test Update', 13 u'tags': [u'Python', u'MongoDB'], 14 u'content': u'Python and MongoDB....', 15 u'time': datetime.datetime(2011, 10, 20, 21, 21, 52, 818000), 16 u'_id': ObjectId('4ea0207dd483050fe8000001'), 17 u'slug': u'python-mongodb'}

首先我们根据slug来获得一篇文章,然后可以通过Python字典访问方法得到键的值,然后重新设置,再对post集合进行更新,在对整个集合进行更新时,你得先匹配要更改的文档,利用_id这个属性来更新是比较常用的方法,因为你其他改了,这个可改不了。在执行update中最常见的错误就是*的条件找到了多个文档,如果这样,数据库就不会更新这个集合,所有最好使用_id来匹配。
如果只更新一个键呢,那就不用这么大费周折了,可以使用”$set”这个修改器,指定一个键,如果不存在,就可以创建。比如我要继续更新上面那篇文章的content,可以这样做(记住,修改它,必须先找到它,这里我利用上面查询到的_id值来找):
1 >>> posts.update({"_id":post["_id"]},{"$set": 2 {"content":"Test Update SET...."}})

MongoDB的修改是很强大的,你可以把数据类型也给改了,比如把tags的数组改成普通的字符串。”$set”过后又想删除这个键,可以使用”$unset”。如果我的这个post里面有一个键是views,即文章访问的次数,我想在每次访问这个文章后给它的值增加1,这该怎么办?于是”$inc”修改器出场了,这个可以用来增加已有键的值,如果没有,则创建它,类似的用法是:
1 2 >>> posts.update({"_id":post["_id"]},{"$inc": {"views":1}})

如果想修改tags这个数组里面的内容怎么办?有一个办法就是用$set整体修改,但只是改里面的一些元素呢,MongoDB准备好了用于数组的修改器。比如,想要在tags里面加一个”Test”,这需要使用”$push”,它可以在数组末尾添加一个元素:
1 >>> posts.update({"_id":post["_id"]},{"$push":{"tags":"Test"}})

为了避免加入了重复的,可以将”$push”改为使用”$addToSet”,如果需要添加多个值,可以配合”$each”来使用,这样就可以添加不重复的进去,如下面:
1 2 >>> posts.update({"_id":post["_id"]},{"$addToSet": 3 {"tags":{"$each":["Python","Each"]}}})

说完了添加,下面是删除,可以把数组看成栈和队列,使用”$pop”来操作,比如上面的:
1 >>> posts.update({"_id":post["_id"]},{"$pop":{"tags":1}})

这个会删除tags里面最后一个,改成-1则删除第一个。可以使用”$pull”来删除数组中指定的值,它会删除数组中所有匹配的值。如何修改其中的一个值呢?可以先删除掉,再增加一个进去,还有就是直接定位修改。比如tags数组中,”Python”是第一个,想把它改成”python”,可以通过下标直接选择,就是tags[0],然后使用上面的”$set”等修改器,如果不确定可以使用$来定位:
1 >>> posts.update({"tags":"MongoDB"},{"$set":{"tags.$":"Hello"}})

这个将先搜索tags中满足”MongoDB”的,如果找到,就把它修改为”Hello”。可以看到上面的update这个函数已经有两个参数了,它还有第3个参数upsert,如果设为”True”,则如果没有找到匹配的文档,就会在匹配的基础上新建一个文档,具体实例就不讲了。

热心网友 时间:2022-04-30 06:48

node.js更新mongodb数组字段可以参考官方指南 http://docs.mongodb.org/manual/reference/operator/update/positional/#up._S_ 提供一个小的案例代码:
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
两台电脑文件同步如何在两台电脑之间同步文件 我的金山快盘不能同步了,急急急! 金山快盘不能同步 金山快盘共享给别人东西无法同步 叔叔生日快乐祝福语 送给弟弟弟的生日祝福,带有鼓励性的 【题库分享】湖南单招考试职业技能测试模拟题库(一) ...了物理知识.下列分析正确的是( )A.跳板跳水运动员起跳后,在上升过程... ...的是( )A.奥运会上的百米赛跑运动员到终点后不能立即停下来... ...比赛时运动员到了终点不能马上停下来(如下图),是因为人体具有... - 信息提示 我为什么喜欢闻自己的体味和脚臭味 为什么我喜欢闻尸臭味很香为什么?? 喜欢闻臭味怎么回事啊 为什么说人类潜意识里很喜欢闻臭味? 为什么喜欢闻屁味 为什么有些人会喜欢闻一些奇怪的味道 为什么有人喜欢闻脚臭味 为什么有些人喜欢闻土腥味或者汽油味? 鼻子总闻见臭味是怎么回事 美瞳我泡了好几个月了,戴上还是磨眼睛怎么办 图片这是日出还是日落? 为什么每次戴美瞳时左眼会觉得有异物磨感 如何区分日出日落的图片? 为什么带美瞳只有一个片磨眼睛? 你们是喜欢日出还是日落?为什么? 以前戴美瞳没什么就这几天戴美瞳就觉得眼睛干涩而且感觉很磨眼睛,是什么问题呢?别说去医院 这个图片是日落还是日出,谢谢!谢谢! 摘美瞳后眼睛有异物感磨眼睛 日落图片美景注解,有关怎样拍好日落的摄影图片,请教你一下,并附上美 ... 微信二维码收款方式个人版使用方面与商户版比有什么限制吗 个人二维码不能收款了吗 请问网络教育的大专文凭可以报考注册会计师吗? 充值网络游戏的钱还能回来吗? 腾讯游戏充钱了申请能退吗? 12岁男孩4个月充值6.7万,游戏平台是否应当退回这笔费用? 数米基金宝的功能最全面的基金分析管理软件 有什么基金工具,可以让我筛选好的基金呢? Java架构之MongoDB-删除文档-deleteMany函数 wifi6最高频率普遍是160mh吗现在可以达到9000兆是什么wifi类型大家对红米k50怎样看? xiaomi_cd46是什么意思?小米AX6000路由器名称: 工资个人所得税的征收起点是多少? 员工工资多少要缴纳个人所得税 购物车怎么分区域 怎么使用购物车呢? mongodb 如何根据自身的值修改自身的某个值 给成立一家私募基金公司取名? 好听特别的私募公司名字取什么好 王亚伟私募基金名称是什么? 如何成立私募基金