【问题标题】:How to clone a document in MongoDB using python如何使用 python 在 MongoDB 中克隆文档
【发布时间】:2021-12-11 01:43:55
【问题描述】:

我正在使用 MongoDB 并试图克隆一个文档,但我一生都无法弄清楚 - 令我沮丧的是,我知道这可能确实很简单,但似乎我的大脑已经阻塞,所以这里是:

我正在尝试自动化一个过程,该过程涉及克隆我的 Mongo 数据库的 users 集合中的文档。流程是这样的:

  1. 使用电子邮件testing@company.com 克隆用户
  2. 修改一些属性(电子邮件、姓名等)并保存新文档

基本上,我只是在尝试做 MongoDB Compass 中“克隆文档”按钮所做的事情,但无法弄清楚。

我的问题是,当我尝试在 python 中执行此操作时,当我调用 await db().save(user) 时,我的 testing_user 一直被覆盖。我考虑过创建一个空白的新user 并手动添加属性,但我确信必须有更好的方法来做到这一点。我所有的谷歌搜索都返回了关于克隆整个数据库或集合的点击,有人知道更好的方法吗?


我的(不起作用的)脚本中的相关行:

testing_user = await db().find_one(User, User.email == "testing@company.com")
new_user = testing_user
new_user.attr1 = "foo"
new_user.attr2 = "bar"
await db().save(new_user)

【问题讨论】:

    标签: python mongodb pymongo


    【解决方案1】:

    如果您在没有获得_id 字段的情况下执行find_one(),则可以操作该对象,然后使用insert_one() 将其插入回同一个(或任何其他)集合中。试试这个:

    import pymongo
    
    db = pymongo.MongoClient()['mydatabase']
    db.mycollection.insert_one({'foo': 1, 'bar': 2}) # Test data - 1 record
    record = db.mycollection.find_one({}, {'_id': 0})
    #
    # make changes to the record here if needed
    #
    db.mycollection.insert_one(record)
    
    for item in db.mycollection.find():
        print(item)
    

    打印 2 个项目:

    {'_id': ObjectId('6176f2dbe4a52fa03307796e'), 'foo': 1, 'bar': 2}
    {'_id': ObjectId('6176f2dbe4a52fa03307796f'), 'foo': 1, 'bar': 2}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-02
      • 2012-03-31
      • 2018-06-05
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      相关资源
      最近更新 更多