想了解如何使用pymongo更新值?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于pymongo更新数据的相关问题,此外,我们还将为您介绍关于MongoDBpymongo模块更新数据、Mo
想了解如何使用pymongo更新值?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于pymongo 更新数据的相关问题,此外,我们还将为您介绍关于MongoDB pymongo模块 更新数据、MongoDb 安装 pymongo 和 mongoengine 使用、Mongodb-- python中使用pymongo连接mongodb数据库、Python 插入 Json 并使用 pymongo 更新 mongodb的新知识。
本文目录一览:- 如何使用pymongo更新值?(pymongo 更新数据)
- MongoDB pymongo模块 更新数据
- MongoDb 安装 pymongo 和 mongoengine 使用
- Mongodb-- python中使用pymongo连接mongodb数据库
- Python 插入 Json 并使用 pymongo 更新 mongodb
如何使用pymongo更新值?(pymongo 更新数据)
我有以下形式的mongodb集合:
{id=ObjectId(....),key={dictionary of values}}where dictionary of values is {''a'':''1'',''b'':''2''.....}
让值字典为''d''
。我需要更新中的键值''d''
。即我想更改''a'':''1''
为''a'':''2''
pymongo中的该怎么办?
代码是这样的:
productData is a collection in mongoDBfor p in productData.find(): for k,v in p.iteritems(): value=v[''a''] value=value+1 v[''a'']=value
现在在productData中反映新值。
这是我尝试过的方法,它引入了一个新的键值对,而不是更新
for p in productData.find(): for k,v in p.iteritems(): value=v[''a''] value=value+1 v[''a'']=value productData.update({''_id'':mongoId},{"$set":{''d.a'':''100''}},upsert=False)
答案1
小编典典如果要将文档的值设置为任意值,可以使用$
set语法。如果该属性已经存在于文档中,则将更新值;如果不存在,则将创建该值。如果您需要像描述的那样在字典中设置单个值,则可以使用点表示法来访问子值。
如果p是检索到的对象:
existing = p[''d''][''a'']
对于pymongo版本 <3.0
db.ProductData.update({ ''_id'': p[''_id'']},{ ''$set'': { ''d.a'': existing + 1 }}, upsert=False, multi=False)
对于pymongo版本 > = 3.0
db.ProductData.update_one({ ''_id'': p[''_id'']},{ ''$set'': { ''d.a'': existing + 1 }}, upsert=False)
但是,如果只需要增加该值,则当多个请求可以同时运行时,此方法可能会带来问题。相反,您应该使用$ inc语法:
对于 <3.0的pymongo版本:
db.ProductData.update({ ''_id'': p[''_id'']},{ ''$inc'': { ''d.a'': 1 }}, upsert=False, multi=False)
对于pymongo版本 > = 3.0:
db.ProductData.update_one({ ''_id'': p[''_id'']},{ ''$inc'': { ''d.a'': 1 }}, upsert=False)
这样可以确保您的增量将始终如一。
MongoDB pymongo模块 更新数据
现在chat集合里有3条数据
import pymongo
mongo_client = pymongo.MongoClient(
host=''192.168.0.112'',
port=27017,
username="admin",
password="123456"
)
mongo_db = mongo_client["db1"]
# 更新数据
res = mongo_db.chat.find()
for i in res:
print(i)
{''_id'': ObjectId(''5cb0ba3abd99392b1427c25e'')}
{''_id'': ObjectId(''5cb0bbf9bd993914d8b5d82c''), ''name'': ''jack'', ''age'': 13}
{''_id'': ObjectId(''5cb0bbf9bd993914d8b5d82d''), ''name'': ''mike'', ''age'': 33}
更新
update_one()
传入前面条件,后面关键词
modified_count :拿到更新的条数
import pymongo
mongo_client = pymongo.MongoClient(
host=''192.168.0.112'',
port=27017,
username="admin",
password="123456"
)
mongo_db = mongo_client["db1"]
# 更新数据
res = mongo_db.chat.update_one({"age":13},{"$set":{"age":34}})
# modified_count 返回更新的条数
print(res,res.modified_count)
# 返回对象
# <pymongo.results.UpdateResult object at 0x0000000002EDBF08>
# 1代表更新一条数据
# 1
更新成功
import pymongo
mongo_client = pymongo.MongoClient(
host=''192.168.0.112'',
port=27017,
username="admin",
password="123456"
)
mongo_db = mongo_client["db1"]
# 更新数据
res = mongo_db.chat.find_one({"age":34})
print(res)
# {''_id'': ObjectId(''5cb0bbf9bd993914d8b5d82c''), ''name'': ''jack'', ''age'': 34}
update_many():
更新多条数据
把age>=0的数据 age都改成888
import pymongo
mongo_client = pymongo.MongoClient(
host=''192.168.0.112'',
port=27017,
username="admin",
password="123456"
)
mongo_db = mongo_client["db1"]
# 更新数据
res = mongo_db.chat.update_many(
{"age":{"$gte":0}},{"$set":{"age":888}}
)
print(res,res.modified_count)
# 返回对象
# <pymongo.results.UpdateResult object at 0x0000000002EDBF08>
# 2代表更新2条数据
# 2
MongoDb 安装 pymongo 和 mongoengine 使用
1.Mongodb 安装
2.mongodb 的增删改查
3.MongoDB 数据类型
4.Mongodb $ 关键字 $ 修改器
5.MongoDB 之 "$" 的奇妙用法
6.MongoDB 之 Array Object 的特殊操作
7.MongoDB 之 Limit 选取 Skip 跳过 Sort 排序
8.MongoDB 设置访问权限、设置用户
9.MongoEngine 使用
10.pymongo
Mongodb-- python中使用pymongo连接mongodb数据库
一.使用
通过pip或者pychrm下载pymongo模块
import json
from pymongo import MongoClient
from bson import ObjectId
mc = MongoClient("127.0.0.1",27017)
MONGODB = mc["数据库名"]
MONGODB.users.find({}) # 可以操作了
上面的文件一般单独写一个settings.py,在用到的时候,通过引入MONGO来操作
关于bson:
mongo中取出的数据有一个''_id''字段相当于mysql中的id, 这个字段的类型是Objectid,所以查询的结果不能直接json序列化,需要将这个''_id''转化为str类型后才能json序列化,相应的,从前端传过来的''_id''也要通过bson转化为ObjectId才能查到Mongodb中的数据
@au.route(''/auto_login'',methods=[''POST''])
def auto_login():
user_info = request.form.to_dict()
print(user_info)
try:
user_id = user_info.get(''user_id'')
user = MONGODB.users.find_one({''_id'': ObjectId(user_id)})
user[''_id''] = str(user[''_id''])
RET = {
''code'': 1,
''msg'': ''自动登陆成功'',
''data'': user
}
except:
RET = {
''code'': 0,
''msg'': ''自动登陆失败'',
''data'': {}
}
return jsonify(RET)
操作示例
# MONGODB = mc["admin"]
# res = MONGODB.users.find_one({"name":"Tom"})
# res["cours"].append({"name":"Tom","money":"100"})
# for index,cours in enumerate(res["cours"]):
# if cours.get("name") == "Tom":
# res["cours"][index]["score"] = 99
# MONGODB.users.delete_one({"age":84})
# MONGODB.users.delete_many({"age":84})
# user = MONGODB.users.find_one({"_id":ObjectId("5cb6eb7322b9441020186701")})
# print(user.get("_id"),type(user.get("_id")))
#
# user["_id"] = str(user["_id"])
# jsonstr = json.dumps(user)
# print(jsonstr , type(jsonstr))
Python 插入 Json 并使用 pymongo 更新 mongodb
如何解决Python 插入 Json 并使用 pymongo 更新 mongodb?
"event_location": "San Jose","event_type": "Party","source_type": [
"COMPANY","CONSUM"
],"device": [
{
"name": "DJ","date_order": "20210120","manufacturer_country": "USA",}
],"problems": [
"Material Rupture"
],"zip_code": "","sum_text": [
{
"sum_text_key": "220229361","text_type_code": "Additional Manufacturer Narrative","text": "A REVIEW OF THE DEVICE HISTORY RECORD HAS BEEN INITIATED."
},{
"sum_text_key": "220229362","text_type_code": "Description of Event or Problem","text": "DEVICE REPORTED RIGHT SIDE RUPTURE."
}
],},{
"event_location": "New York","event_type": "Baby Shower","device": [
{
"name": "Musical Band",{
"event_location": "Boston","event_type": "Wedding","device": [
{
"name": "Soft Music Band",} ]}
我有上面的 json 数组,想把它转储到 mongo db。在某些条件下,但是当我尝试插入它时,我会收到重复的集合键错误或键错误“_id”
db = client["music"]
json = {...data here}
for event in json[''results'']:
for device in event[''device'']:
name= device[''name'']
other_name = [''DJ'',''Band'',''String'',''Home'']
list_of_collections = db.list_collection_names()
for n in other_name:
# When the db is completely empty
if len(n) ==0:
collection = db[n] # create a collection with this name
collection.insert_one(event)
else:
for collection_name in list_of_collections:
if n in collection_name:
# find the matching collection in list of collection and update it
collection = db[collection_name]
collection.update({''_id'': event[''_id'']},event,upsert=True)
else:
collection = db[n]
collection.insert_one(event)
我想我在最后一个 for 循环中遗漏了一些东西。当我尝试更新数据库时,我也在 collection.update 行中收到关键错误“_id”。
E11000 重复键错误集合:event_tb.DJ index: id dup key: { _id: ObjectId(''608c37fb5806d865763c6f58'')
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
关于如何使用pymongo更新值?和pymongo 更新数据的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于MongoDB pymongo模块 更新数据、MongoDb 安装 pymongo 和 mongoengine 使用、Mongodb-- python中使用pymongo连接mongodb数据库、Python 插入 Json 并使用 pymongo 更新 mongodb的相关知识,请在本站寻找。
本文标签: