我在一个集合中有三个字段:
Cards.attachSchema(new SimpleSchema({
foo: {
type: String,
},
bar: {
type: String,
},
foobar: {
type: String,
optional: true,
autoValue() {
if (this.isInsert && !this.isSet) {
return `${foo}-${bar}`;
}
},
},
);
因此,我想让foobar字段作为auto(或默认)值(如果未显式设置)以返回foo和bar的值。这可能吗?
答案 0 :(得分:1)
您可以在this.field()
函数中使用autoValue
方法:
Cards.attachSchema(new SimpleSchema({
foo: {
type: String,
},
bar: {
type: String,
},
foobar: {
type: String,
optional: true,
autoValue() {
if (this.isInsert && !this.isSet) {
const foo = this.field('foo') // returns an obj
const bar = this.field('bar') // returns an obj
if (foo && foo.value && bar && bar.value) {
return `${foo.value}-${bar.value}`;
} else {
this.unset()
}
}
},
},
);
相关阅读:https://github.com/aldeed/simple-schema-js#autovalue
但是,您也可以通过集合中的using a hook on the insert
method解决此问题。在那里,您可以假设存在值foo
和bar
,因为您的架构要求它们:
Cards.attachSchema(new SimpleSchema({
foo: {
type: String,
},
bar: {
type: String,
},
foobar: {
type: String,
optional: true,
},
);
Cards.after.insert(function (userId, doc) {
// update the foobar field depending on the doc's
// foobar values
});