node.js - MongoDB 没有为嵌套模式添加默认日期?

标签 node.js mongodb mongoose

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

这是架构:

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 属性的有效值,除非您指定必需。仅当值未定义时才会设置默认值,如果值是假则不会设置。

关于node.js - MongoDB 没有为嵌套模式添加默认日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58369807/

相关文章:

javascript - 将多个文档数组展开为新文档

node.js - RestFul Api Node.js 和 Mongoose : handling errors

python - 使用 python-shell 将 TypedArray 数据从 NodeJS 发送到 Python 的最佳方法

JavaScript Object vs Map - 如何处理特殊键?

javascript - 如何设置正确的 src 路径(GET localhost 获取 404(未找到))?

AjAX post 请求重定向页面时出现问题

mongodb - 将 mongoDB 转储导入 arangoDB

mongodb - 如何使用 meteor 的简单模式插入用户用户名

node.js - Mongoose - find({},cb) 和 find({}).exec(cb) 之间有什么区别?

node.js - Handlebars : query and sum