【问题标题】:Using "from" as a kwarg key in pymongo's runcommand在 pymongo 的 runco​​mmand 中使用“from”作为 kwarg 键
【发布时间】:2014-01-31 08:21:20
【问题描述】:

我正在尝试使用 pymongo 从远程 mongo 实例中克隆一个集合,从 documentation 克隆一个集合需要 cloneCollection 命令,

{ cloneCollection: "<collection>", from: "<hostname>", query: { <query> } }

对于run this command in pymongo,我需要将命令的附加参数指定为kwargs,如下所示:

db.command("cloneCollection","db_name.collection_name", from = "localhost:27017")

但由于from 是python 中的保留关键字,我不能将其用作关键字。 另一种方法是将命令作为 python dict 传递,如下所示:

db.command({"cloneCollection":"db_name.collection_name", "from":"localhost:27017"})

但是在这种情况下,订单没有保留,我收到了这个错误

pymongo.errors.OperationFailure: command {'from': 'localhost:27017', 'cloneCollection': 'db_name.collection_name'} failed: no such cmd: from

【问题讨论】:

    标签: python mongodb clone pymongo mongo-collection


    【解决方案1】:

    根据 pymongo 使用字典的方式,您可能可以使用 OrderedDict(来自内置集合模块)。这仅适用于 python 2.7,但有可用于 python 2.4 及更高版本的反向移植。

    在这种情况下,您可以执行以下操作:

    from collections import OrderedDict
    config = OrderedDict((
        ("cloneCollection", "db_name.collection_name"),
        ("from", "localhost:27017"),
    ))
    db.command(config)
    

    【讨论】:

      【解决方案2】:

      我想我可以使用bson.son.SON 来创建一个 SON 对象(一个 dict 的子类,它保持键的顺序),当我们将参数或 python dict 传递给 pymongo 命令时,pymongo 在内部也会这样做,

      from bson.son import SON
      db.command(SON([("cloneCollection","db_name.collection_name"), ("from","localhost:27017")]))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-03
        • 2011-05-13
        • 2018-06-06
        • 1970-01-01
        • 2012-09-22
        相关资源
        最近更新 更多