首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >(Pymongo)在交互MongoDB之后返回Json数据结果

(Pymongo)在交互MongoDB之后返回Json数据结果
EN

Stack Overflow用户
提问于 2022-10-18 09:03:00
回答 1查看 36关注 0票数 0

我想要回Json的结果如下,

包含is it successfully functioning (使用0/1)、modified contentsmodified data count

Json结果:

{"ok“:1,"msg”:{ "name“:"Moma","Age”:33},{ "name“:"Kara","Age”:44},"count":2}

已试用的代码如下:

我试着用.inserted_count.upserted_count来计算修改的数字

x_new = json.dumps(x)应该将数据传输到Json

似乎我知道很多逻辑,但不知道如何使逻辑工作。

代码语言:javascript
运行
复制
import pymongo
import datetime
import json

def init_db(ip, db, coll):
    try:
        myclient = pymongo.MongoClient('mongodb://' + ip + '/')
        mydb = myclient[db]
        mycol = mydb[coll]
        success_condition = "success on initializ operation"

    except Exception as e: 
        success_condition = "failed on initializ operation"
        
    return mydb, mycol, success_condition

  # ins_data = insert_db_data
def ins_data(one_or_many_bool, insert_values_json):
    try:    
        if one_or_many_bool == True:
            x = mycol.insert_many(insert_values_json)
        else:
            x = mycol.insert_one(insert_values_json)

        success_condition_insert = "success on ins_data operation"

    except Exception as e: 
        success_condition_insert = "failed on ins_data operation"

    return x , success_condition_insert

ip_input = input("Enter the ip: ")
exist_DB_name = input("Enter exist DB name: ")
exist_coll_name = input("Enter exist collection name: ")
mydb, mycol, success_condition  = init_db(ip_input, exist_DB_name, exist_coll_name)
print(success_condition)

insert_one_or_many = input("U are update one or many values? ( 1 for many, 0 for one ): ")
newvalues_str = input("Enter new values: ")

one_or_many_bool = bool(int(insert_one_or_many))
insert_values_json =json.loads(newvalues_str)

x , success_condition_insert = ins_data(one_or_many_bool, insert_values_json)
print(success_condition_insert)
x_new = json.dumps(x)
print(x_new)
print(type(x_new))

  • 试过的代码输出:

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "C:\Users\chuan\OneDrive\Desktop\10.17_connect_mongoD_練習\test.py", line 56, in <module>
    x_new = json.dumps(x)
  File "C:\Users\chuan\AppData\Local\Programs\Python\Python310\lib\json\__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
  File "C:\Users\chuan\AppData\Local\Programs\Python\Python310\lib\json\encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "C:\Users\chuan\AppData\Local\Programs\Python\Python310\lib\json\encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "C:\Users\chuan\AppData\Local\Programs\Python\Python310\lib\json\encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type InsertManyResult is not JSON serializable

我想要的函数可以像这个那样在Json中输出

{"ok“:1,"msg”:{ "name“:"Moma","Age”:33},{ "name“:"Kara","Age”:44},"count":2 }

EN

回答 1

Stack Overflow用户

发布于 2022-10-19 06:26:44

.modified_countfor modified_data in mycol.find().sort("_id", -1).limit(#num):是关键

看下面,我很接近,这是我的解决方案

代码语言:javascript
运行
复制
import pymongo
import datetime
import json
def init_db(ip, db, coll):
    myclient = pymongo.MongoClient('mongodb://' + ip + '/')
    mydb = myclient[db]
    mycol = mydb[coll]

    return mydb, mycol

def change_db_data(myquery_json, one_or_many_bool, newvalues_json ):
    
    if one_or_many_bool == True:
        x = mycol.update_many(myquery_json, newvalues_json)
    else:
        x = mycol.update_one(myquery_json, newvalues_json)
    return x

ip_input = input("Enter the ip: ")
exist_DB_name = input("Enter exist DB name: ")
exist_coll_name = input("Enter exist collection name: ")
mydb, mycol  = init_db(ip_input, exist_DB_name, exist_coll_name)

myquery_str = input("Enter ur query: ")
update_one_or_many = input("U are update one or many values? (ex:1 for many , 0 for one): ")
newvalues_str = input("Enter new values: ")

one_or_many_bool = bool(int(update_one_or_many))

myquery_json =json.loads(myquery_str)
newvalues_json =json.loads(newvalues_str)
x = change_db_data(myquery_json, one_or_many_bool, newvalues_json)
print(x)
print(x.modified_count, "documents updated.")

number_of_update_data = int(x.modified_count)

for modified_data in mycol.find().sort("_id", -1).limit(number_of_update_data):
  print(modified_data)

# 1 means success 
return_status_str = { "ok" : 1 , "msg" : modified_data , "count" : number_of_update_data}
print(return_status_str)

以及ur expect输出(我还没有很好地在msg中打印出3个修改过的数据,但结果非常接近)

{'ok':1,'msg':{'_id':ObjectId('6348d73be94317989175dc31'),'name':'Kim','ID':0,'Age':44,'time':datetime.datetime(2022,10,17,9,11,24),'Update_ID':'99999'},'count':3}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74108321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档