原来字段:

{
"_id" : ObjectId("5df0a28e406405edeac5001f"),
"username" : "修改这一条,别的还存在不",
"password" : "xxxxxxxxxxx",
"open_id" : "",
"union_id" : "",
"telphone" : "",
"nickname" : "洛城陛下",
"farm_id" : [
"牧场id1",
"牧场id2"
],
"is_active" : "",
"is_detele" : "",
"email" : "xxxxxx",
"photo" : "https://www.123.png",
"gov_addr" : "xxxxxxx",
"auth_code" : "",
"register_time" : "2019-12-10",
"update_time" : "2019-12-10"
}

需求一:只更新 password,telephone等字段----更新一般非嵌套字段

方法:局部更新,使用 {$set:{"username":"要修改的值"}}

python代码操作

from pymongo import MongoClient
# 这里需要说明,用_id当做查询条件,必须导入这个类,要不然报错
from bson.objectid import ObjectId client = MongoClient(host="127.0.0.1",port=27017)
db = client["userinfo"]["user"] ret = db.update({"_id":ObjectId("5df0a28e406405edeac5001f")},{"$set":{"username":"python修改用户名"}}) print(ret) # 结果
{'n': 1, 'nModified': 1, 'ok': 1.0, 'updatedExisting': True} # 要更新的值,和原来的值一样,则会返回 {'n': 1, 'nModified': 0, 'ok': 1.0, 'updatedExisting': True}

修改后的字段:

{
"_id" : ObjectId("5df0a28e406405edeac5001f"),
"username" : "python修改用户名",
"password" : "xxxxxxxxxxx",
"open_id" : "",
"union_id" : "",
"telphone" : "",
"nickname" : "洛城陛下",
"farm_id" : [
"牧场id1",
"牧场id2"
],
"is_active" : "",
"is_detele" : "",
"email" : "xxxxx",
"photo" : "https://www.123.png",
"gov_addr" : "xxxxxxx",
"auth_code" : "",
"register_time" : "2019-12-10",
"update_time" : "2019-12-10"
}

需求二:更新farm_id里面的第一个元素的值为 这是数组第一个元素更新后的值

方法:局部更新数组里面的指定的元素(而非对象)的值  使用下标进行修改

数组里面放的是元素

{"name":"zhang",

"friends":["张三","李四","王五"]}

数组里面放的是字典对象

{"name":"zhang",

"friends":[{"a":1,"b":2},{"c":3,"d":4}]}

更新前的字段:就是修改后的字段

python代码操作

from pymongo import MongoClient
from bson.objectid import ObjectId
client = MongoClient(host="127.0.0.1",port=27017)
db = client["userinfo"]["user"] ret = db.update({"_id":ObjectId("5df0a28e406405edeac5001f")},{"$set":{"farm_id.1":"python修改后的值"}}) print(ret) # 结果
{'n': 1, 'nModified': 1, 'ok': 1.0, 'updatedExisting': True}

更新后的值

{
"_id" : ObjectId("5df0a28e406405edeac5001f"),
"username" : "python修改用户名",
"password" : "xxxxxxxxxxx",
"open_id" : "",
"union_id" : "",
"telphone" : "",
"nickname" : "洛城陛下",
"farm_id" : [
"牧场id1",
"python修改后的值"
],
"is_active" : "",
"is_detele" : "",
"email" : "xxxxxx",
"photo" : "https://www.123.png",
"gov_addr" : "xxxxxxx",
"auth_code" : "",
"register_time" : "2019-12-10",
"update_time" : "2019-12-10"
}

假如数组里面放的是字典对象,怎么修改对象的key的值?

新建数据格式为:

{
"_id" : ObjectId("5df0b4bb406405edeac502a3"),
"username" : "python修改用户名",
"password" : "xxxxxxxxxxx",
"farm_id" : [
{
"a" : 1
},
{
"a" : 2
}
]
}

需求:修改第一个数组里面的a的值为:python修改后的值

python代码操作

from pymongo import MongoClient
from bson.objectid import ObjectId
client = MongoClient(host="127.0.0.1",port=27017)
db = client["userinfo"]["user"] ret = db.update({"_id":ObjectId("5df0b4bb406405edeac502a3")},{"$set":{"farm_id.0.a":"python修改后的值"}}) print(ret) # 结果
{'n': 1, 'nModified': 1, 'ok': 1.0, 'updatedExisting': True}

修改后的数据格式:

{
"_id" : ObjectId("5df0b4bb406405edeac502a3"),
"username" : "python修改用户名",
"password" : "xxxxxxxxxxx",
"farm_id" : [
{
"a" : "python修改后的值"
},
{
"a" : 2
}
]
}

但是有一个问题,假如不知道下标,但是要精准的修改数组中,指定对象的键值对的值,可以给每个对象,增加一个唯一id字段,过滤条件换成唯一id字段,而不是_id

新建数据结构

{
"_id" : ObjectId("5df0b4bb406405edeac502a3"),
"username" : "python修改用户名",
"password" : "xxxxxxxxxxx",
"farm_id" : [
{
"a" : "python修改后的值",
"id" : ""
},
{
"a" : 2,
"id" : ""
}
]
}

python操作代码

from pymongo import MongoClient
from bson.objectid import ObjectId
client = MongoClient(host="127.0.0.1",port=27017)
db = client["userinfo"]["user"]
# 查询条件为 farm_id.id是为了精准定位
ret = db.update({"farm_id.id":""},{"$set":{"farm_id.$.a":"python通过唯一字段,精准定位"}})
print(ret) # 结果
{'n': 1, 'nModified': 1, 'ok': 1.0, 'updatedExisting': True}

修改后的字段

{
"_id" : ObjectId("5df0b4bb406405edeac502a3"),
"username" : "python修改用户名",
"password" : "xxxxxxxxxxx",
"farm_id" : [
{
"a" : "python通过唯一字段,精准定位",
"id" : ""
},
{
"a" : 2,
"id" : ""
}
]
}

updata的参数 upsert = True 或 False

collection_name = "demo"

数据为: 数据只有一条,查找farm_id=2,修改 nick_name="大碗宽面",upsert=True

{
"farm_id":"",
"breed_detail":[ {
"user_id":"",
"nick_name":"吴亦凡"
} ]
}

python代码

# TODO

mongodb数据库的改操作的更多相关文章

  1. 第一篇:一天学会MongoDB数据库之Python操作

    本文仅仅学习使用,转自:https://www.cnblogs.com/suoning/p/6759367.html#3682005 里面新增了如果用用Python代码进行增删改查 什么是MongoD ...

  2. mysql数据库和mongodb数据库的相关操作以及两个数据库的区别

    在docs命令中执行数据操作 MySQL数据库 先启动MySQL服务器  net start mysql 进入MySQL服务器MySQL -uroot -p(这里写你的数据库密码) (-P是从哪个端口 ...

  3. Python连接MongoDB数据库并执行操作

    原文:https://blog.51cto.com/1767340368/2092813 环境设置: [root@mongodb ~]# cat /etc/redhat-release CentOS ...

  4. MongoDB数据库文档操作

    前面的话 本文将详细介绍MongoDB数据库关于文档的增删改查 数据类型 在介绍文档操作之前,首先要了解MongoDB的数据类型 MongoDB支持许多数据类型,包括 1.字符串 - 这是用于存储数据 ...

  5. Mongodb数据库(linux)——基础操作

    简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.它是非关系型数据库,但其结构与MySQL又很相似,mysql中的表格,在这里被称为集合,mysql表格内的数据是一 ...

  6. ThingkPHP对数据库进行改操作

    public function test_check(){ $Experiment = M("Experiment");//实例化Experiment对象.这个对象是跟数据库的表对 ...

  7. java对mongodb数据库的简单操作

    准备工作: 下载好mongodriver.jar包(https://oss.sonatype.org/content/repositories/releases/org/mongodb/mongodb ...

  8. mongodb数据库集合操作

    1:更新update update() 方法用于更新已存在的文档.语法格式如下: db.collection.update( <query>, <update>, { upse ...

  9. NodeJS操作MongoDB数据库

    一.node.js对于mongodb的基本操作 1.数据库的开机 首先我们要先对数据库进行开机的操作,建立一个文件夹用于存放数据库文档.如D:\mongo,接下去在cmd当中键入命令-> mon ...

随机推荐

  1. nginx禁止指定的user_agent访问

    #禁止指定user_agent(浏览器标识)if ($http_user_agent ~ 'curl|baidu'){ return 403;} if ($http_user_agent ~* 'cu ...

  2. 因修改/etc/ssh权限导致的ssh不能连接异常解决方法

    因修改/etc/ssh权限导致的ssh不能连接异常解决方法 现象: $ssh XXX@192.168.5.21 出现以下问题 Read from socket failed: Connection r ...

  3. beego 注解路由

    场景描述:使用注解路由,不起作用. 额外描述: 路由的添加都写在 main函数中了,同时未设置 beego.BConfig.RunMode ="dev"也未引入 :routers包 ...

  4. docker面试总结

    1.什么是docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化.容 ...

  5. 基于LVM(逻辑卷管理)的快照原理

    一.为甚么不管多大的逻辑卷进行备份,快照都会在几秒之内完成? 快照在拍摄的一瞬间,系统会记录那个时间点逻辑卷的状态.数据等,此时拍下的快照相当于一张白纸.如图所示 快照做好后,随着时间的推移,源卷里的 ...

  6. [深度概念]·Attention Model(注意力模型)学习笔记

    此文源自一个博客,笔者用黑体做了注释与解读,方便自己和大家深入理解Attention model,写的不对地方欢迎批评指正.. 1.Attention Model 概述 深度学习里的Attention ...

  7. 【转载】GitHub 标星 1.2w+,超全 Python 常用代码合集,值得收藏!

    本文转自逆袭的二胖,作者二胖 今天给大家介绍一个由一个国外小哥用好几年时间维护的 Python 代码合集.简单来说就是,这个程序员小哥在几年前开始保存自己写过的 Python 代码,同时把一些自己比较 ...

  8. 【计算机视觉】阶编码本模型(Multi phase codebook model)

    转自:http://www.cnblogs.com/xrwang/archive/2012/04/24/MPCBBGM.html 多阶编码本模型(Multi phase codebook model) ...

  9. IntelliJ IDEA将导入的项目转成maven项目

    今天导入公司的maven项目,发现结构不对劲,难怪说为啥一直不能部署tomcat,后面百度才了解到导入这个项目还不是maven项目,首先需要把这个项目变成maven项目,然后再进行tomcat的部署下 ...

  10. 【Linux 网络编程】滑动窗口协议

    <1>通知接受窗口(rwnd): 预防应用程序发送的数据超过对方的缓冲区.接收方使用的流量控制<2>拥塞窗口(cwnd): 预防应用程序发送的数据超过网络所承受的能力.发送方使 ...