【问题标题】:Erroneous Data explorer Azure batch -> python SDK uploads escaped json?错误的数据资源管理器 Azure 批处理-> python SDK 上传转义的 json?
【发布时间】:2017-11-15 09:56:35
【问题描述】:

我正在使用 PyMongo (Python 3.6) 与连接到 Azure 上托管的 DocumentDB 的 MongoDB API 进行交互。当更新 mongo DB 中的现有 _ids 时,我得到一个明显可见的错误,即我更新的 json(bson?)已被转义。这发生在 Azure 数据资源管理器中。见图片。

虽然我通过客户端查询数据库时的结果似乎是有效的并且处于工作状态。我用来上传数据的代码片段如下:

def upsert_data(self, collection: str, data: Any):
    bulk_updates = []
    coll = self._database[collection]

    for item in data:
        bulk_updates.append(
            UpdateOne(
                {"_id": ObjectId(item.pop("_id"))},
                {"$set": item}))

    try:
        coll.bulk_write(bulk_updates)
    except BulkWriteError as bwe:
        pprint.pprint(bwe.details)

self._database[collection] 是在 init 中创建的客户端。

item的结构(类型:dict)大致如下:

   {
       'varA': 0,
       'varB': 12,
       'varC': [
           {'var2': 23}, 
           {'var2': 24}]
    }

如果我做错了什么,有人可以告诉我吗?这是我在阅读文档后提出的解决方案。我对此很陌生。任何输入将不胜感激!

提前致谢!

【问题讨论】:

    标签: python mongodb azure pymongo


    【解决方案1】:

    我不确定你所谓的 json escaped 是什么意思。被掩盖或内容被清空?您的屏幕截图看起来也不完整。

    我按照你的代码尝试批量更新数据,它工作正常。

    请参考下面的sn-p代码:

    import pymongo
    from pymongo import UpdateOne
    
    uri = "your connect string"
    client = pymongo.MongoClient(uri)
    
    bulk_updates = []
    
    for doc in coll.find({}):
        bulk_updates.append(UpdateOne({'_id': doc.get('_id')},{"$set": {"test":"add"}}, upsert=False))
    
    print(bulk_updates)
    
    db.coll.bulk_write(bulk_updates)
    
    print("update success ")
    

    更新文档

    有关您可以与 bulk_write 方法一起使用的更多操作,这里是文档链接:http://api.mongodb.com/python/current/api/pymongo/operations.html

    【讨论】:

      猜你喜欢
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 2017-12-02
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多