【问题标题】:Inserting new attribute to a document using MongoDB ( Python )使用 MongoDB ( Python ) 将新属性插入文档
【发布时间】:2011-06-30 16:22:57
【问题描述】:

我是 MOngoDB 的新手(来自 CouchDB),在使用 MonDB python 驱动程序向 MongDB 中的文档添加新属性时遇到问题。

例如,我有以下文档:

{
'_id':123456,
'text':"this is nice"
}

而我想插入一个新的属性,例如:

{
'_id':123456,
'text':"this is nice",
'created_time':datetime.datetime.now()
}

如何将 created_time 属性添加到我的文档中?

谢谢!

【问题讨论】:

    标签: python mongodb


    【解决方案1】:

    要添加到Taha's answer,您可以使用currentDate 插入日期时间属性:

    db.getCollection("collection-name").update( 
    {}, 
    {
        $currentDate: {
            "date-field-name": { $type: "date" } // you can also use "timestamp" here
         }
    }, 
    false, true)
    

    或设置您可以使用的特定日期:

    db.getCollection("collection-name").update( 
    {}, 
    {
        $set: {
            "date-field-name": ISODate("2020-01-23T04:05:06.007Z")
         }
    }, 
    false, true)
    

    【讨论】:

      【解决方案2】:

      要向 MongoDB 集合上的所有现有文档插入新属性,我们可以在 mongo shell 上执行此方法:

      db.collection.update( 
          {}, 
          {'$set': {"new_attribute":"attribute_value"}}, 
          false, 
          true
      )
      
      • {} 是查询条件,在我们的例子中,将新属性添加到所有记录中,我们传递一个空对象 {}
      • {'$set': {"new_attribute":"attribute_value"}} 表示使用$set 运算符,在我们的记录中插入一个新键"new_attribute",它将具有此值"attribute_value"
      • false 是 upsert 参数,它告诉 mongo 在找不到匹配项时不要插入新文档
      • true 是 multi 参数,它告诉 mongo 更新多个满足查询条件的文档

      要查找更多详细信息,请查看: https://docs.mongodb.com/manual/reference/method/db.collection.update/

      【讨论】:

      • 喜欢它:) 谢谢
      【解决方案3】:

      如果您感兴趣的更新仅适用于创建或更新的日期时间,您可以在创建模型时添加此属性

      {
          timestamps: true
      }
      

      这将添加两个属性 updatedAt 和 createdAt mongodb 会自动为您维护它们(创建和更新时间)。

      【讨论】:

        【解决方案4】:
        db.collection.update({'_id' : ObjectId(...)}, 
                             {'$set' : {'create_time' : datetime(..) }})
        

        【讨论】:

        • 我怎样才能从脚本中做到这一点?这样它给出的 ObjectId 没有定义
        • 可能有点晚了,但是...您可以在您的 python 脚本中使用导入以下内容:bson.objectid import ObjectId。然后您只需按如下方式使用它:c.find({"_id": ObjectId(idAsAString)})。另一种选择是使用 update_one :c.update_one({"_id":idAsAString}, {'$set' : {'create_time' : datetime(..) }})
        【解决方案5】:

        您可以使用 $set 更新文档。

        http://www.mongodb.org/display/DOCS/Updating

        或者您可以获取文档,对其进行编辑(使用 python 代码)并将其保存回来。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-10-21
          • 1970-01-01
          • 2021-07-13
          • 2015-08-15
          • 2014-09-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多