2016-10-20 6 views
2

を更新できるように、ブラウザのコンソールは言う:ルールが流星のMongoDB

更新に失敗しました:アクセスが以下のコードは、クライアントがundefinedvalue配列の値を設定できるようにする必要があります

を否定したが、それは失敗します上記のエラーが発生します。
何故、どのように修正するのか?サーバはそれを取得する際のおかげ

//client 
const doc = myCol.findOne({element: 'abc'}); 
myCol.update({_id: doc._id}, {$set: {value: undefined}}); 

//server 
myCol.allow({ 
    update: function(userId, doc, fields, modifier) { 
     console.log(modifier); // -----=> { '$set': {} } --------------why? 
     let edits = {$set: {value: undefined}}; 

     const userVarified = (userId && doc.userId == userId); 
     const ABC = (doc.element === 'abc'); 
     const XYZ = (doc.action === 'xyz' && doc.element === 'x' && doc.name === 'y' && _.difference(fields, ['values]).length === 0); 
     try { 
     if (userVarified) { 
      if (ABC) { 
       check(modifier, Match.OneOf(edits)); 
      } else if (XYZ) { 
       return true; 
      } 
     } 
     } catch (e) { 
     return false; 
     } 
     return true; 
    } 
}); 

編集1
は修飾子は{ '$set': {} }です。どんな考え?

編集 "編集1" でエラーを修正ミッケルあたりの答えとして、2

このコードでは、修飾子{ '$set': { value: '' } }が使用されるようになりました。

今やcheck(modifier, Match.OneOf(checkEdit));という表現はfalseを返しますが、クライアントが送信するものとconsole.log(modifier)が同じであるため、一致すると予想しました。
なぜそれが間違っているのでしょうか?

は、ファイルの先頭に追加され、代わりにMatch.test(modifier, checkEdit);を使用し

import { Match } from 'meteor/check'を修正しました。

+0

あなたはほとんどそれを得ていますが、未設定の$を使用する必要があり、$を参照してください – Mikkel

答えて

2

値を 'undefined'に設定しようとするのは非官能的で、Mongoはあなたにそれをさせません。

私はあなたがMongoのドキュメントごとに、代わりに未設定の$を使うべきだと思う:

$解除 $解除オペレータは、特定のフィールドを削除します。

{$ unset:{: ""、...}} $ unset 式の指定された値(つまり "")は操作に影響を与えません。

埋め込みドキュメントまたは配列にaを指定するには、ドット 表記を使用します。

https://docs.mongodb.com/manual/reference/operator/update/unset/

+0

設定されていません**編集2 ** –