2016-06-08 60 views
0

大家好,我用我的项目Collection2使用,我希望得到一个字段,类型为长度:从另一场阵流星Aldeed - Collection2 - 获取数组字段的长度在autoValue

这里是我的代码示例

 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(“是”),长度,我得到未定义。我在这里做错了什么?谢谢

回答

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,以避免重新进入你的钩子,当你更新计数器。

+0

谢谢@michelFloyd。我有一个解决我想要实现的方法。我希望yesLength字段的值设置为“是”字段的长度,该字段是数组 – Kenshinman

+0

,查看已更新的答案。 –

+0

嗨,谢谢,但我在调用方法'/ questions/update'时在控制台_Exception中遇到了这个错误。错误:在筛选出不在模式中的密钥后,当我尝试更新或插入我的集合时,您的修改器现在是空的 – Kenshinman