【问题标题】:How to get the object id in PyMongo after an insert?插入后如何在 PyMongo 中获取对象 ID?
【发布时间】:2012-02-05 17:05:48
【问题描述】:

我正在对 Mongo 进行简单的插入...

db.notes.insert({ title: "title", details: "note details"})

note文档插入后,需要立即获取object id。从插入返回的结果包含一些关于连接和错误的基本信息,但没有文档和字段信息。

我发现了一些关于使用 upsert=true 的 update() 函数的信息,我只是不确定这是否是正确的方法,我还没有尝试过。

【问题讨论】:

    标签: mongodb insert pymongo


    【解决方案1】:

    已更新;以前因为不正确而被删除

    看起来您也可以使用db.notes.save(...) 来执行此操作,它在执行插入后返回_id。

    查看更多信息: http://api.mongodb.org/python/current/api/pymongo/collection.html

    【讨论】:

    • 抱歉,被 pymongo 弄糊涂了——更新的答案应该可以工作。
    • 请注意,save(D) 实际上是用于 insert(D) 或 update(D._id, D) 的驱动程序端便捷方法,具体取决于 D 是否具有 _id 字段(如果没有,如果有,请更新)
    【解决方案2】:

    关于 MongoDB 的一个很酷的事情是 id 是在客户端生成的。

    这意味着您甚至不必询问服务器 id 是什么,因为您一开始就告诉它要保存什么。使用 pymongo,插入的返回值将是对象 id。看看吧:

    >>> import pymongo
    >>> collection = pymongo.Connection()['test']['tyler']
    >>> _id = collection.insert({"name": "tyler"})
    >>> print _id.inserted_id 
    4f0b2f55096f7622f6000000
    

    【讨论】:

    【解决方案3】:

    您只需将其分配给某个变量:

    someVar = db.notes.insert({ title: "title", details: "note details"})
    

    【讨论】:

      【解决方案4】:

      泰勒的回答对我不起作用。 使用 _id.inserted_id 有效

      >>> import pymongo
      >>> collection = pymongo.Connection()['test']['tyler']
      >>> _id = collection.insert({"name": "tyler"})
      >>> print(_id)
      <pymongo.results.InsertOneResult object at 0x0A7EABCD>
      >>> print(_id.inserted_id)
      5acf02400000000968ba447f
      

      【讨论】:

      • 也为我工作。 +1
      【解决方案5】:

      较新的 PyMongo 版本会贬低 insert,而应使用 insert_oneinsert_many。这些函数返回一个pymongo.results.InsertOneResultpymongo.results.InsertManyResult 对象。

      使用这些对象,您可以分别使用.inserted_id.inserted_ids 属性来获取插入的对象ID。

      有关insert_oneinsert_manythis 的更多信息,请参阅this 链接以了解有关pymongo.results.InsertOneResult 的更多信息。

      【讨论】:

        【解决方案6】:

        最好使用 insert_one() 或 insert_many() 而不是 insert()。这两个适用于较新的版本。您可以使用inserted_id 来获取id。

        myclient = pymongo.MongoClient("mongodb://localhost:27017/")
        myDB = myclient["myDB"]
        userTable = myDB["Users"]
        userDict={"name": "tyler"}
        
        _id = userTable.insert_one(userDict).inserted_id
        print(_id)
        

        或者

        result = userTable.insert_one(userDict)
        print(result.inserted_id)
        print(result.acknowledged)
        

        如果你需要使用insert(),你应该像下面这样写

        _id = userTable.insert(userDict)
        print(_id)
        

        【讨论】:

          【解决方案7】:
          some_var = db.notes.insert({ title: "title", details: "note details"})
          print(some_var.inserted_id)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-10-24
            相关资源
            最近更新 更多