使用meteor以自动形式更新对象时出错

时间:2015-06-05 14:08:46

标签: meteor meteor-autoform

我检查了文档,但我无法理解这一点。我有一个对象,我想使用自动表单和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”。

1 个答案:

答案 0 :(得分:4)

当您尝试更新Mongo中的文档时,如果只想更新某些字段,则将使用$set修饰符。

Records.update({ _id: 1 }, { $set: { loc: { lat: 12, lng: 75 } } })

以上内容只会更新loc值。

Records.update({ _id: 1 }, { loc: { lat: 12, lng: 75 } })

以上内容会删除所有其他密钥,而记录只会包含_idloc

您的钩子必须在loc中设置doc.$set键。

请使用以下代码更新您的钩子,它应该有效:

updateRecordForm: {
    before: {
        update: function(doc) {
            console.log("storing location data", doc);
            doc.$set.loc = Session.get('geoData');
            return doc;
        }
    } 
}