如何为服务器生成时间设置默认值?

How to set a default value to server generated time?

是否可以有一个日期时间字段,在保存期间将其作为默认服务器生成的时间?

class ADoc(Document):
    ...
    created_at = me.DateTimeField(default=datetime.datetime.utcnow)

这个模型有两个问题:

  1. created_at会在创建模型实例时获取一个值,而不是文档存入数据库的时间。

  2. 使用客户端时间,这可能与服务器时间不同 -- 我想始终使用服务器时间作为时间源。

也许你可以使用运算符 $currentDate ?

UPD: 我喜欢pymongo,但我认为它可以用于MongoEngine,你可以试试:

collection = Animal._get_collection()
collection.update({}, {"$currentDate": {"date": 1}}, upsert=true)

example here

默认情况下,_id 字段包含创建时的时间戳。
您可以像这样访问它 ObjectId("507c7f79bcf86cd7994f6c0e").getTimestamp().

还有$currentDate and new Date

我会在我的 ADoc 中使用由我定义的插入方法 class:

from datetime import datetime

class ADoc:
    def __init__(self, db, config):
        self.docs= db['docs']
        self.config = config

    def insert(self, document):
        item = {
           'name': document['name'],
           'created': datetime.utcnow()
        }
        self.docs.insert_one(item)

然后在需要的时候简单地执行该方法

client = MongoClient(DB_URL)
db = client['yourDb']

doc = "your new doc"
adoc = ADoc(db, app.config)

adoc.insert(doc)