如何在Mongoose模式中定义触发器?

3

在mongoose模型级别上,是否有任何触发器可以在成员集合数量达到100时将open字段的值设置为false?

var mongoose  = require('mongoose');
var Schema    = mongoose.Schema;

var listSchema = new Schema({
  name: {
    type: String,
    required: true,
    trim: true
  },
  desc: {
    type: String
  },
  open: {
    type: Boolean,
    default: true
  },
  members: [{
    userid: {
      type: Schema.Types.ObjectId, ref: 'User'
    },
    prId: {
      type: Schema.Types.ObjectId, ref: 'PR'
    },
    checkedIn: {
      type: Boolean
    }
  }]
});

module.exports = mongoose.model('List', listSchema);
1个回答

1

在Mongo中无法使用触发器。很难说您为什么想要在集合达到某个限制时更改文档,但也许有界集合是您真正需要的?

new Schema({..}, { capped: { size: 1024, max: 100 } });

size 是集合的最大大小(以字节为单位),max 是可以插入到集合中的文档的最大数量。


一个有上限的集合在这种情况下可能很有用,但是当达到文档的最大数量时,是否有任何与集合相关的事件?因为我的愿望是当有限制的集合已满时将打开文档的值更改为false。 - Edu
我认为没有。使用带有上限的集合并不能防止插入超过100个文档:这就像FIFO队列,当你插入第101个文档时,第一个文档将从集合中移除。 - Piotr Chowaniec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接