执行$ set文档时,不会保存Date.now

时间:2019-04-18 19:17:56

标签: mongodb mongoose mongoose-schema

因此,我有以下代码可更新我的latestComment。当我console.log更新后的文档中有日期。但是,如果我返回MongoDB并检查字段本身,它甚至不存在吗?

以下是示例输出,其中仅包含来自返回文档的文本注释

{ user: { userRecord: 5c9ba4d4347bb645e086527b },
  picture: null,
  video: null,
  document: null,
  text: 'Dwight Schrute',
  date: 2019-04-18T18:51:31.207Z }

代码段

CommentFeed.findOneAndUpdate(
        { _id: req.body.commentFeed },
        {
            $set: {
                latestComment: {
                    user: {
                        userRecord: req.user._id
                    },
                    text: req.body.text,
                    picture: req.body.picture,
                    video: req.body.video,
                    document: req.body.document
                }
            }
        },
        { new: true }
    )
        .then((feed) => {
            console.log(feed.latestComment); <----I get the date timestamp here
    ...

架构

CommentFeedSchema = new Schema({
    latestComment: {
        user: {
            userRecord: {
                type: Schema.Types.ObjectId,
                ref: 'User'
            }
        },
        text: { type: String },
        picture: { url: { type: String }, blobName: { type: String } },
        video: { url: { type: String }, blobName: { type: String } },
        document: { url: { type: String }, blobName: { type: String } },
        date: { type: Date, default: Date.now } <--Not saving
    },
...

1 个答案:

答案 0 :(得分:0)

正如我所见,您正在使用$set更新数据库中的文档(记录)。但是$set用于更新文档中的特定字段。

当插入查询时,默认值有效,否则如果您要更新文档,则此值将不起作用,并且仅更新您已通过的字段。

注意:不传递日期的null