GVKun编程网logo

如何使用pymongo更新值?(pymongo 更新数据)

9

想了解如何使用pymongo更新值?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于pymongo更新数据的相关问题,此外,我们还将为您介绍关于MongoDBpymongo模块更新数据、Mo

想了解如何使用pymongo更新值?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于pymongo 更新数据的相关问题,此外,我们还将为您介绍关于MongoDB pymongo模块 更新数据、MongoDb 安装 pymongo 和 mongoengine 使用、Mongodb-- python中使用pymongo连接mongodb数据库、Python 插入 Json 并使用 pymongo 更新 mongodb的新知识。

本文目录一览:

如何使用pymongo更新值?(pymongo 更新数据)

如何使用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模块 更新数据

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 使用

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数据库

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

如何解决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的相关知识,请在本站寻找。

本文标签: