【问题标题】:Mongoose: Timestamps does not work with subdocumentsMongoose:时间戳不适用于子文档
【发布时间】:2022-01-25 14:25:51
【问题描述】:

我想为我的子文档添加时间戳,但我的 reponses 数组不包含任何时间戳。

我的模特:

const forumSchema = new Schema(
  {
    user: { type: mongoose.Schema.Types.ObjectId, ref: "User" },
    title: { type: String, required: true },
    content: { type: String, required: true },
    like: [{ type: mongoose.Schema.Types.ObjectId, ref: "User" }],
    reponses: [
      {
        user: { type: mongoose.Schema.Types.ObjectId, ref: "User" },
        content: { type: String, required: true },
        like: [{ type: mongoose.Schema.Types.ObjectId, ref: "User" }],
      },
//does not work
      {
        timestamps: true,
      },
    ],
    slug: { type: String, required: true },
  },
//this one works
  {
    timestamps: true,
  }
);

当我想添加响应时,我看不到任何时间戳

  Forum.findOneAndUpdate({ _id: req.params.id }, { $push: data }, { new: true }, (err, question) => {
      if (err) {
        res.status(404).send(err);
      } else {
        res.send(question);
      }
    });

我没有收到任何错误,并且我的文档已按预期更新。

请问我错过了什么?

【问题讨论】:

    标签: mongoose


    【解决方案1】:

    您必须为响应定义一个单独的架构,然后在您的主架构中使用,

    const responsesSchema = new Schema(
      {
        user: { type: mongoose.Schema.Types.ObjectId, ref: "User" },
        content: { type: String, required: true },
        like: [{ type: mongoose.Schema.Types.ObjectId, ref: "User" }]
      }, 
      {
        timestamps: true
      }
    );
    

    在你的架构中使用它,

    const forumSchema = new Schema(
      {
        user: { type: mongoose.Schema.Types.ObjectId, ref: "User" },
        title: { type: String, required: true },
        content: { type: String, required: true },
        like: [{ type: mongoose.Schema.Types.ObjectId, ref: "User" }],
        reponses: {
          type: [responsesSchema]
        },
        slug: { type: String, required: true }
      },
      {
        timestamps: true
      }
    );
    

    【讨论】:

    • 谢谢。嵌套文档没有办法做到这一点?
    • 我在回答中添加了一种方式,您还期待什么其他方式?
    • 我的意思是没有单独的架构
    • 我觉得不可能,不然mongoose怎么理解时间戳设置?
    • 有道理。所以我确实听从了你的建议,但不是“reponses:{ type:[responsesSchema]}”,而是:“reponses:[{ type:mongoose.Schema.Types.ObjectId,ref:“Answer”}]”。不知道有什么区别(我不是猫鼬专家),但它有效。谢谢你:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多