0

allow メソッドまたは deny メソッドで挿入または更新する前に、フィールドをドキュメントに追加または削除する必要があります。私は、変換機能が必要な機能を提供すると推測していました。

流星のドキュメントの状態

「オプションの変換関数。ドキュメントは、fetch または findOne から返される前、および監視、許可、および拒否のコールバックに渡される前に、この関数を介して渡されます。」

関数からドキュメントを変換して返そうとするたびに、許可または拒否のいずれかからドキュメントの変換されたバージョンがmongodbに挿入されたものではありませんでした。2つの戦略で変身してみました。

戦略 1

var ts = new Date(); 
return _.extend(_.pick(doc, 'name', 'discounts', 'locations', 'url_map', 'client_updated_td', '_id'), {   created_td:
ts,   updated_td: ts,  });

戦略 2

// Discountsroutings.fields is in /lib/Discountroutings.js
Discountsroutings.fields = ['_id', 'created_td', 'updated_td', 'client_updated_td', 'name', 'discounts', 'locations', 'url_map'];

// this is in /server/discountsroutings.js var ts = new Date();
doc.created_td = ts; doc.updated_td = ts; return _.each(doc,function(value, key, list){  
  if(Discountsroutings.fields.indexOf(key)  == -1 ){
    delete doc[key];   
  } 
});

どちらも機能しませんでした。どちらの場合も、フィールドは追加されましたが、フィールドは削除されませんでした。

興味深いことに、挿入許可と挿入拒否の内部から同じ 2 つの戦略を試しましたが、戦略 #2 だけが機能しました。したがって、今のところ、Deny 挿入/更新メソッド内で戦略 #2を使用しています。正常に動作し、配線も難しくありません。

私はこれを正しくやっていますか?コレクション サーバー側のフィールドを正しい方法で追加または削除したい。

4

3 に答える 3

0

最近同じことをする必要があり、ここに例が見つかりませんでした...私がそれをした方法を共有したいと思いました:

使用する

  • https://atmospherejs.com/matb33/collection-hooks
  • http://arasatasaygin.github.io/is.js/

    Prospects.before.update(function (userId, doc, fieldNames, modifier, options) {
    
    
    //check existence of other segment property and make sure to delete it if segment is updated from 'Other...' to something else
    if (is.existy(doc.other_segment)) {
        var segment = Segments.findOne({_id: modifier.$set.segment});
    
        if (is.not.undefined(segment) && is.not.empty(segment)) {
            if (is.not.equal(segment.name, 'Other...')) {
                Prospects.update( {_id: doc._id} , {$unset: { other_segment : '' } } );
            }
        }
    
    }});
    

お役に立てれば!:)

于 2015-06-25T01:35:37.090 に答える