mongoose,如何在子文档中记录update_time

时间:2017-09-04 01:04:58

标签: node.js mongodb mongoose schema

我有一个猫鼬模式:

this is my mongoose schema

'use strict';

module.exports = app => {
const mongoose = app.mongoose;

const custSchema = new mongoose.Schema({
  belong: { // 所属信息
    user_id: { type: 'String', required: true },
    type: { type: 'Number', required: true }, // bee、4s店、平台
    username: { type: 'String', required: true }, // 用户名
  },
  delete: { type: Number, default: 0 },
  info: { // 客户基本信息
    name: { type: 'String', required: true }, // 客户姓名
    brith: { type: 'Date', required: true }, // 出生日期
    sex: { type: 'Number', required: true }, // 性别
    eduction: Number, // 学历
    level: { type: 'Number', required: true }, // 客户等级
    tag: Number, // 客户标签
    tel: { type: 'Number', required: true }, // 电话
    family: { // 家庭信息
      situation: Number, // 家庭类型
      earning: Number, // 家庭总收入
      location: { // 家庭住址
        province: Number, // 省
        city: Number, // 市县
        region: Number, // 区镇
        addr: String, // 具体地址
      },
    },
    job: { // 工作信息
      industry: Number, // 行业
      company: String, // 公司
      occupation: String, // 职位
      earning: Number, // 收入
      location: { // 公司地址
        province: Number, // 省
        city: Number, // 市县
        region: Number, // 区镇
        addr: String, // 具体地址
      },
    },
    comment: String, // 备注
    update_time: { type: 'Date', required: false }, // 数据更新时间
  },
  ... other code 

更新'custSchema.info'中的字段时如何保存update_time?

例如:我想更新'info.name',之后,将包含'cust.schema.info'中的update_time。

我不喜欢通过在服务上添加逻辑来解决这个问题,我可以通过定义模式来解决它吗?

1 个答案:

答案 0 :(得分:0)

是的,你可以!实际上,这是一个常见的问题,有几个插件可以帮到你,我的推荐是:Mongoose Timestamp。

https://github.com/drudge/mongoose-timestamp

这是一个非常简单的单个文件,您可以在集成到项目directly on Github之前实际读取它。

然后,您可以按如下方式使用时间戳:

User.findOneAndUpdate({username: 'Prince'}, { password: 'goatcheese' }, { new: true, upsert: true })
        .exec(function (err, updated) {
            console.log(user.updatedAt); // Should be approximately createdAt + 1 second
            console.log(user.createdAt < user.updatedAt); // true
        });