mongodb 在mongoose中为新的子文档或子模式添加时间戳

tnkciper  于 2023-03-07  发布在  Go
关注(0)|答案(2)|浏览(140)

我在mongo atlas里有这份文件

_id: 5f8939cbedf74e363c37dd86,
firstname: "Person",
lastname: "Person lastname",
sex: "Masculino",
age: "20",
birthDay: 2020-10-07T00:00:00.000+00:00,
vaccines: Array
 0:Object
  dose: Array
   _id: 5f8939cbedf74e363c37dd87
   vaccine:5f7023ad96f7ed21e85be521
   createdAt:2020-10-16T06:12:27.726+00:00
   updatedAt:2020-10-16T06:12:27.726+00:00
 1:Object
  dose:Array
  _id:5f893a9ca98e97188c93fea8
  vaccine:5f70259796f7ed21e85be523
 2:Object
  dose:Array
  _id:5f893acda98e97188c93fea9
  vaccine:5f7023ad96f7ed21e85be521

这是我的 Mongoose 模式

const mySchema = new Schema({
  firstname: {
    type: String,
    required: true,
  },
  lastname: {
    type: String,
    required: true,
  },
  sex: {
    type: String,
    required: true,
  },
  age: {
    type: String,
    required: true,
  },
  birthDay: {
    type: Date,
    required: true,
  },
  vaccines: [
    {
      type: new Schema(
        {
          vaccine: {
            type: Schema.ObjectId,
            ref: "Vaccine",
          },
          dose: Array,
        },
        { timestamps: true }
      ),
    },
  ],
});

每次我添加一个新的人疫苗数组得到一个新的对象与时间戳,如你所见,在我的js文件中,我使用以下代码:

const addPerson = (person) => {
  const myPerson= new Model(person);
  return myPerson.save();
};

然后当我为同一个人添加新疫苗时,它没有时间戳,我用下面的代码:

const addPersonVaccine = async ({ params, body }) => {
  if (!params) return Promise.reject("Invalid ID");
  const vaccines = [body];
  const foundPerson = await Model.updateOne(
    {
      _id: params,
    },
    {
      $push: {
        vaccines: vaccines,
      },
    }
  );
  return foundPerson;
};

这是我体内的疫苗阵列[ { vaccine: '5f72c909594ee82d107bf870', dose: 'Primera' } ]
问题是,我没有关于下一个时间戳的结果,正如您在我的mongo atlas文档中所看到的:

1:Object
  dose:Array
  _id:5f893a9ca98e97188c93fea8
  vaccine:5f70259796f7ed21e85be523
 2:Object
  dose:Array
  _id:5f893acda98e97188c93fea9
  vaccine:5f7023ad96f7ed21e85be521

这是在子文档或子模式中实现时间戳的最佳方式吗?
我将感谢你的回答,谢谢👏

xytpbqjk

xytpbqjk1#

您可以对内部模式使用mongoose模式时间戳选项

const mongoose = require("mongoose");
    
    const forumSchema = new mongoose.Schema(
      {
        title: { type: String, required: true },
        biddings: [
          {
            type: new mongoose.Schema(
              {
                biddingId: String,
                biddingPoints: Number
              },
              { timestamps: true }
            )
          }
        ]
      },
      { timestamps: true }
    );
    
    const Forum = mongoose.model("Forum", forumSchema);
    
    module.exports = Forum;

了解更多Mongoose schema set timestamp on nested document

o2gm4chl

o2gm4chl2#

const mySchema = new Schema({
firstname: {
type: String,
required: true,
},
lastname: {
type: String,
required: true,
},
sex: {
type: String,
required: true,
},
age: {
type: String,
required: true,
},
birthDay: {
type: Date,
required: true,
},
vaccines: [
{
  type: new Schema(
    {
      vaccine: {
        type: Schema.ObjectId,
        ref: "Vaccine",
      },
        dose: Array,
    },
        { timestamps: { createdAt: "created_at", updatedAt: 
        "updated_at" } }
         ),
        },
         ],
       },{ timestamps: { createdAt: "created_at", updatedAt: 
       "updated_at" } }
    );

更新查询

testModel
  .updateMany(
    { _id: _id },
    { $push: { vaccines: vaccines } },
    { multi: true }
  )
  .then((update) => {
    res.send(update);
  })
  .catch((err) => {
    res.send(err);
  });

相关问题