最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

MongoDB是否不为嵌套模式添加默认日期?

运维笔记admin12浏览0评论

MongoDB是否不为嵌套模式添加默认日期?

MongoDB是否不为嵌套模式添加默认日期?

我正在尝试将表单结果添加到集合中的现有客户端,并且已成功添加所有传递的表单数据变量,但是,尽管存在于架构中,也不会创建和保存默认日期变量。

这里是架构:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

// Create Schema
const FormSchema = new Schema({
    formID: {
        type: String
    },
    formName: {
        type: String
    },
    date_completed: {
        type: Date,
        default: Date.now
    },
    formData: {
        type: JSON
    }
});

const ClientSchema = new Schema({
    clientID: {
        type: String,
        required: true,
        unique: true
    },
    dob: {
        type: Date,
        required: true
    },
    formResults: {
        tags: [
            {
                type: FormSchema
            }
        ]
    }
});

module.exports = Client = mongoose.model('client', ClientSchema);

这是发布表单结果的方法:

router.post('/:id', auth, (req, res) => {
    Client.update(
        { clientID: req.params.id },
        {
            $push: {
                formResults: {
                    $each: [
                        {
                            formID: req.body.formID,
                            formName: req.body.formName,
                            formData: req.body.formData
                        }
                    ]
                }
            }
        }
    )
        .then(() => res.json({ success: true }))
        .catch(
            err => res.status(404).json({ success: false }) && console.log(err)
        );
});

我已经尝试通过将date_completed: Date.now与其他形式变量一起传递来强制日期,但这没有什么区别。结果仍然保存,没有列出日期变量。我也尝试删除集合并重新创建它,这没有任何变化。并且我检查了集合的索引,对于该索引只有_id和clientID。

这里是执行后保存在数据库中的数据,显示没有date_completed:值。Stored Data

回答如下:

乍看之下,您的代码正确无误,因为它符合mongoose的文档和教程,您可以测试此代码:

// Create Schema
const FormSchema = new Schema({
    formID: {
        type: String
    },
    formName: {
        type: String
    },
    date_completed: {
        type: Date,
        default: function() {
            if (!this.date_completed) {
                return Date.now();
            }
            return null;
        }
    },
    formData: {
        type: JSON
    }
});

或:

var minuteFromNow = function(){
    var timeObject = new Date();
    return timeObject;
};

// Create Schema
const FormSchema = new Schema({
    formID: {
        type: String
    },
    formName: {
        type: String
    },
    date_completed: {
        type: Date,
        default: minuteFromNow
    },
    formData: {
        type: JSON
    }
});

让我们也说这个null是Date属性的有效值,除非您指定为必填。仅在未定义值的情况下才设置默认值,而在其值不正确的情况下才设置默认值。

发布评论

评论列表(0)

  1. 暂无评论