Meteor Aldeed - Collection2 - 获取要在autoValue

时间:2016-06-08 15:25:09

标签: mongodb meteor collections meteor-collection2

大家好我在我的项目中使用Collection2我希望得到一个字段的长度类型:来自另一个字段的数组

这是我的代码示例

        yes: {
            type: Array,
            optional: true
        },
        "yes.$": {
            type: Object
        },
        yesLength: {
            type: Number,
            autoValue: function(){
                var lenYes = this.field("yes").length;
                console.log(this.field("yes"));
                console.log(lenYes)
                return lenYes;
            },
            optional: false
        },

当我将this.field(“是”)记录到控制台时,它看起来很好,但是当我记录lenYes,即this.field(“是”)。长度时,我得到了未定义。我在这里做错了吗?感谢

1 个答案:

答案 0 :(得分:0)

在Collection2中,如果其他字段在修饰符中为$set,则只能获取其值。通常情况并非如此,在这种情况下,您需要实际.findOne()来获取文档,然后从中获取当前值。

您可以将Collection2视为更改的验证程序,但它不是当前值的验证程序。

由于yesLength应该表示数组的长度,并且数组的长度可以通过修饰符以多种不可预测的方式更改,因此使用collection hook进行计算可能更有意义更新后的yesLength

MyCollection.after.insert(function(userId,doc){
  if ( doc.yes ){ // the yes array exists
    MyCollection.direct.update(doc._id,{ $set: { yesLength: doc.yes.length }});
  }
});

MyCollection.after.update(function(userId,doc,fieldNames){
  if ( fieldNames.indexOf('yes') > -1 ) { // yes array was modified
    MyCollection.direct.update(doc._id,{ $set: { yesLength: doc.yes.length }});
  }
});

您需要使用.direct以避免在更新计数器时重新输入挂钩。