我检查了文档,但我无法理解这一点。我有一个对象,我想使用自动表单和Collections2与meteor进行更新。
//模式
Records = new Mongo.Collection('records');
var Schemas = {};
Schemas.Record = new SimpleSchema({
title: {
type: String,
label: "Title",
max: 200
},
caption: {
type: String,
label: "Caption",
max: 200
},
text: {
type: String,
label: "Detailed text",
optional: true,
max: 1000
},
loc: {
type: Object,
optional: true,
blackbox: true
},
createdAt: {
type: Date,
autoform: {
type: "hidden"
},
autoValue: function() {
if (this.isInsert) {
return new Date;
}
else if (this.isUpsert) {
return {
$setOnInsert: new Date
};
}
else {
this.unset();
}
}
},
updatedBy: {
type: String,
autoValue: function() {
return Meteor.userId();
}
}
});
Records.attachSchema(Schemas.Record);
我有一个钩子,所以我在更新之前分配对象
AutoForm.hooks({
insertCommentForm: {
before: {
insert: function(doc) {
doc.commentOn = Template.parentData()._id;
return doc;
}
}
},
updateRecordForm: {
before: {
update: function(doc) {
console.log("storing location data");
doc.loc = Session.get('geoData');
console.log(doc.loc);
return doc;
}
}
}
});
我收到此错误。
未捕获错误:当修饰符选项为true时,所有验证 对象键必须是运算符。你忘记了
$set
吗?
我不知道怎么用autoform“$ set”。
答案 0 :(得分:4)
当您尝试更新Mongo中的文档时,如果只想更新某些字段,则将使用$set
修饰符。
Records.update({ _id: 1 }, { $set: { loc: { lat: 12, lng: 75 } } })
以上内容只会更新loc
值。
Records.update({ _id: 1 }, { loc: { lat: 12, lng: 75 } })
以上内容会删除所有其他密钥,而记录只会包含_id
和loc
。
您的钩子必须在loc
中设置doc.$set
键。
请使用以下代码更新您的钩子,它应该有效:
updateRecordForm: {
before: {
update: function(doc) {
console.log("storing location data", doc);
doc.$set.loc = Session.get('geoData');
return doc;
}
}
}