当前位置:  开发笔记 > 编程语言 > 正文

Meteor中自动createdAt和updatedAt字段

如何解决《Meteor中自动createdAt和updatedAt字段》经验,为你挑选了1个好方法。

在我的集合中,我想自动生成createdAtupdatedAt包含最后一次插入/更新对象的日期的字段 - 有点像Ruby on Rails中发生的那样.目前我正在与一个类似于此的观察者这样做:

MyCollection.find({}).observeChanges({
  changed: function(id, changes) {
    MyCollection.update(id, ...);
  },
});

有更好/更有效/更直接的方式吗?



1> Bernát..:

我使用Collection2.它autoValue在模式中支持一个计算字段强制值的函数.由于这两个字段用于所有集合,您可以将它们保存到变量中:

@SchemaHelpers =
  createdAt:
    type: Date
    autoValue: ->
      if @isInsert
        return new Date
      if @isUpsert
        return $setOnInsert: new Date
      if @isUpdate
        @unset()
        return
  updatedAt:
    type: Date
    autoValue: ->
      return new Date

然后在集合中:

Schema = {}
Posts = new Meteor.Collection("posts")
Schema.Posts = new SimpleSchema
  createdAt: SchemaHelpers.createdAt
  updatedAt: SchemaHelpers.updatedAt
  title:
    type: String
    max: 30
  body:
    type: String
    max: 3000
Posts.attachSchema(Schema.Posts)

该解决方案updatedAt始终存在,并且其值createdAt仅在插入时非常接近(不一定相同).如果updatedAt在插入时不需要设置,可以使用Collection2自述文件中的示例:

updatedAt: {
  type: Date,
  autoValue: function() {
    if (this.isUpdate) {
      return new Date();
    }
  },
  denyInsert: true,
  optional: true
},

但这不会处理upserts.我不知道任何正确处理upserts的好解决方案,并且在插入时将字段留空.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有