将日期类型添加到已创建的文档中

Adding date type to the documents already created

我的猫鼬模式定义如下。

mongoose.Schema({
    "url": String,
    "translations": [
        {
            "targetLang": String,
            "source": String,
            "target": String
        }
    ],
}, { versionKey: false });

我更新了我的架构以包含 createdAtupdatedAt,新架构如下所示:

mongoose.Schema({
    "url": String,
    "translations": [
        {
            "targetLang": String,
            "source": String,
            "target": String,
            "createdAt": { type: Date, default: Date.now },
            "updatedAt": { type: Date, default: Date.now }
        }
    ],
}, { versionKey: false });

因此,当创建新文档时,createdAtupdatedAt 会按预期自动填充。如何使用新密钥 createdAtupdatedAt 获取旧文档。有什么办法吗?

注意:我同意旧文件有当前或任何以前的日期。但我希望他们都有一个约会。

您需要手动更新它们,例如从 mongoshell:

{
    const toUpdate = db.getCollection('collection').find({
        $or: [
            { 'translations.createdAt': null },
            { 'translations.updatedAt': null }
        ]
    });

    toUpdate.forEach(doc => {
        const timestamp = doc._id.getTimestamp();
        doc.translations.createdAt = timestamp;
        doc.translations.updatedAt = timestamp;
        
        db.getCollection('collection').updateOne({ _id: doc._id }, { $set: doc });
    });
}