I would like to try to create Collection Behaviours: timestamp (don’t depend on collection extend package) such as lai:collection-extensions.
Please help me with example???
One example is to make a subclass of collection and override the insert/update methods to add timestamps:
class AutoTimestampCollection extends Mongo.Collection {
insert(document, ...rest) {
document.createdAt = new Date();
super(document, ...rest);
}
update(selector, modifier, ...rest) {
modifier.$set = modifier.$set || {};
modifier.$set.updatedAt = new Date();
super(selector, modifier, ...rest);
}
}
And make your Collections instances of this new class:
const Todos = new AutoTimestampCollection('todos');
Note: This code is an example and untested, use caution when implementing. You should probably check out the code in timestampable to see how it works and implement similar
Very thanks, I will try.
If I have many collection extends such as: softRemovable, restorable.
Excuse me, could you example one more for softRemovable/restorable behaviours?

document is undefined
class AutoTimestampCollection extends Mongo.Collection {
insert(document, callback) {
document.createdAt = new Date();
console.log(document)
return super.insert(document, callback);
}
As I mentioned in my note, that was just example code. You should add your own parameter checking logic (if you want it). As an example, I didn’t point the super calls in the methods to the right place (should be super.insert( not super(
Calling insert on a database without a document to insert will always throw an error.
How are you calling the insert function?
Here’s an example with the other behaviours:
Note: untested and you should adjust for your needs
class AutoTimestampCollection extends Mongo.Collection {
insert(document, ...rest) {
document.createdAt = new Date();
super.insert(document, ...rest);
}
update(selector, modifier, ...rest) {
modifier.$set = modifier.$set || {};
modifier.$set.updatedAt = new Date();
super.update(selector, modifier, ...rest);
}
remove(selector, ...rest) {
// Note we're updating calling update on the super-class (Mongo.Collection) instead of remove
super.update(selector, { $set: { deleted: true, deletedAt: new Date() } }, ...rest)
}
restore(selector, ...rest) {
// Adjust based on how you want to track deletes/restores etc.
super.update(selector, { $set: { deleted: false, restoredAt: new Date() } }, ...rest);
}
}
Thanks again, I will try
Now It work fine 
Now have problem with Meteor.userId() in collection extends
class AutoTimestampCollection extends Mongo.Collection {
constructor(name){
super(name);
this.userId = Meteor.userId(); // don't work
}
insert(document, ...rest) {
document.createdAt = new Date();
document.createdBy = Meteor.userId(); // don't work
super.insert(document, ...rest);
}
and have problem with Simple Schema, bc I don’t have createdAt , createdBy field definde
export default new SimpleSchema({
refNo: {
type: String,
},
name: {
type: String,
},
memo: {
type: String,
optional: true,
}