使用流星更新自动形式的对象时出错

Error when updating an object in auto-form with meteor

我已经查看了文档,但我无法理解这个问题。我有一个对象,我想使用 Auto-Form 和 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;
            }
        } 
    }
});

我收到这个错误。

Uncaught Error: When the modifier option is true, all validation object keys must be operators. Did you forget $set?

我不知道如何使用自动表单“$set”。

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

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

以上只会更新 loc 值。

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

以上将删除所有其他键,记录将只有 _idloc

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

请使用以下代码更新您的挂钩,它应该可以工作:

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