原来字段:

{
"_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. 拉取代码产生冲突 && 切换分支

    1.拉取代码产生冲突 项目中用的主要是 IDEA 编辑器,拉取代码时产生冲突的时候,就先 add + commit 一下,然后再拉取代码,这样子就不冲突了. 拉取过后再push一次. 2.切换一个新增 ...

  2. jenkins pipline和jenkinsfile

    Jenkins Pipeline(或简称为 "Pipeline")是一套插件,将持续交付的实现和实施集成到 Jenkins 中. Jenkins Pipeline 提供了一套可扩展 ...

  3. Yarn-本地获取任务日志

    Yarn-本地获取任务日志 yarn logs -applicationId application_1517538889175_2550 > logs.txt

  4. P4962 朋也与光玉题解

    题目链接 光坂小镇是一个由 n 个点(编号为 1 ~ n),m 条有向边构成的图,每个节点上都有一个光玉,光玉共有 k 种,编号为 0 ~ k−1. 为了使一切改变,朋也需要找齐全部的 k种光玉.他可 ...

  5. 360度3D 旋转插件

    Circlr插件是一款基于jQuery的可以对图片进行360度全方位旋转展示的插件.Circlr通过按一定角度规律拍摄的产品图片,制作出可以使用鼠标拖动.鼠标滚轮和移动触摸来进行图片逐帧旋转的效果.比 ...

  6. node.js--使用Express中app.use()分模块开发

    app.use(path,callback)中的callback既可以是router对象又可以是函数:将一个URL路径与一个函数绑定,第一个参数为访问的路径,如果第一参数为空,则表示任何路径都触发这个 ...

  7. grunt接触

    grunt使用 以下内容均为已经安装好grunt,具体grunt的安装过程不述,可以参考grunt的相关资料. 1.项目初始化grunt 在项目文件夹的根目录下面,打开命令行grunt init,执行 ...

  8. python3小demo

    总结常用的功能小实例,快速学习并掌握python技能 1.墨迹天气 import requests from lxml.html import etree import json import tim ...

  9. api接口统一封装

    具体的接口api模块,例如authorization.js import axios from '../axiosWrapper' let prefix = process.env.API_ROOT ...

  10. Delphi 赋值语句和程序的顺序结构