0

在允许或拒绝方法中插入或更新之前,我需要向文档添加或删除字段。我曾假设转换函数将提供所需的功能。

流星文档状态

“一个可选的转换函数。在从 fetch 或 findOne 返回之前,以及在传递给观察、允许和拒绝的回调之前,将通过该函数传递文档。”

每当我尝试从允许或拒绝从函数转换和返回文档时,文档的转换版本不是插入到 mongodb 中的内容。我尝试通过 2 种策略进行转型。

策略一

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

策略二

// 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 。工作正常,连接起来也不难。

我这样做正确吗?我想以正确的方式从收集服务器端添加或删除字段。

4

3 回答 3

2

Steeve 你试过我的收藏钩子包了吗?听起来像你需要的

于 2013-10-27T00:38:23.350 回答
0

您似乎知道要删除的字段列表。那么为什么不使用$set$unset来添加和删除字段呢?

于 2013-10-27T08:02:53.973 回答
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 回答