mongodb数据库的改操作
原来字段:
{
"_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数据库的改操作的更多相关文章
- 第一篇:一天学会MongoDB数据库之Python操作
本文仅仅学习使用,转自:https://www.cnblogs.com/suoning/p/6759367.html#3682005 里面新增了如果用用Python代码进行增删改查 什么是MongoD ...
- mysql数据库和mongodb数据库的相关操作以及两个数据库的区别
在docs命令中执行数据操作 MySQL数据库 先启动MySQL服务器 net start mysql 进入MySQL服务器MySQL -uroot -p(这里写你的数据库密码) (-P是从哪个端口 ...
- Python连接MongoDB数据库并执行操作
原文:https://blog.51cto.com/1767340368/2092813 环境设置: [root@mongodb ~]# cat /etc/redhat-release CentOS ...
- MongoDB数据库文档操作
前面的话 本文将详细介绍MongoDB数据库关于文档的增删改查 数据类型 在介绍文档操作之前,首先要了解MongoDB的数据类型 MongoDB支持许多数据类型,包括 1.字符串 - 这是用于存储数据 ...
- Mongodb数据库(linux)——基础操作
简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.它是非关系型数据库,但其结构与MySQL又很相似,mysql中的表格,在这里被称为集合,mysql表格内的数据是一 ...
- ThingkPHP对数据库进行改操作
public function test_check(){ $Experiment = M("Experiment");//实例化Experiment对象.这个对象是跟数据库的表对 ...
- java对mongodb数据库的简单操作
准备工作: 下载好mongodriver.jar包(https://oss.sonatype.org/content/repositories/releases/org/mongodb/mongodb ...
- mongodb数据库集合操作
1:更新update update() 方法用于更新已存在的文档.语法格式如下: db.collection.update( <query>, <update>, { upse ...
- NodeJS操作MongoDB数据库
一.node.js对于mongodb的基本操作 1.数据库的开机 首先我们要先对数据库进行开机的操作,建立一个文件夹用于存放数据库文档.如D:\mongo,接下去在cmd当中键入命令-> mon ...
随机推荐
- 11.8 Springcloud项目简介
各位领导好,我从毕业后做了两年Java开发工程师,刚开始都是一些SSM框架的项目,但是由于技术不断更新,微服项目成为必然的趋势,大约在做了1年的SSM框架,之后开始接触微服项目,前后经理过Dubbo和 ...
- CF-Div.3-B. Minimize the Permutation【模拟·需要清醒的脑子】
题目传送门 根据字典序,是个人都会想到依次把目前最小的数尽量往前面移动,直到它不能再往前移动,或者已经到了它的期望位置(就是排列的那个位置 比如$i$就应该在位置$i$)为止. 所以我刚开始是这么写的 ...
- 【VS开发】【C++语言】reshuffle的容器实现算法random_shuffle()的使用
假设你需要指定范围内的随机数,传统的方法是使用ANSI C的函数random(),然后格式化结果以便结果是落在指定的范围内.但是,使用这个方法至少有两个缺点.首先,做格式化时,结果常常是扭曲的,所以得 ...
- Java 并发编程:volatile的使用及其原理(二)
一.volatile的作用 在<Java并发编程:核心理论>一文中,我们已经提到过可见性.有序性及原子性问题,通常情况下我们可以通过Synchronized关键字来解决这些个问题,不过如果 ...
- ios模拟器快捷键
shift+cmd+h 返回桌面 cmd+5或者4或者3 可以直接调节大小 cmd+R运行项目 cmd+R弹出键盘 ios模拟器弹出键盘 在xcode6中, 模拟器中的键盘和电脑的键盘可以进行绑定 ...
- HTML标签-->段落,格式,文本
只有努力奔跑,才能一直停留在原地. <!--段落标签--> <h1>默认向左</h1> <h1 align="right">向右对齐 ...
- Springboot与springcloud
1.什么是Spring Boot? 它简化了搭建Spring项目,自动配置Spring,简化maven配置,自带tomcat无需部署war包,创建独立的spring引用程序main方法运行: 2.Sp ...
- numpy数组的索引和切片
numpy数组的索引和切片 基本切片操作 >>> import numpy as np >>> arr=np.arange(10) >>> arr ...
- OLT设置vlan透传及ONU端口划vlan
CZ-PX-ShangShi-FTTH-OLT-A#show runn System current configuration:!Software Version ISCOM5800E-SMCB_1 ...
- Git+码云安装
注册码云 1.1 下载git https://git-scm.com 1.2 安装 git安装一直next 下一步就行 1.3 测试 1.4 git原理