2015-10-03 86 views
2

我需要在集合中使用bulk操作,以刪除database中某些條件的重複項。我試圖使用rawCollection()但我真的不知道如何。如何在流星中使用rawCollection進行聚合?

這是我需要cron執行每隔x小時

function removeDups() { 
    var count = 0, 
    collection = Beatmaps.rawCollection(), 
    bulk = collection.initializeUnorderedBulkOp(); 
    collection.aggregate([ 
    { '$sort': { 'difficultyrating': -1 }}, 
    { '$group': { '_id': '$beatmapset_id', 'ids': { '$push': '$_id' }, 'count': { '$sum': 1 }}}, 
    { '$match': { 'count': { '$gt': 1 }}} 
    ]).forEach(function(doc) { 
    doc.ids.shift(); 
    bulk.find({'_id': { '$in': doc.ids }}).remove(); 
    count++; 
    if(count === 100) { 
     bulk.execute(); 
     bulk = collection.initializeUnorderedBulkOp(); 
    } 
    }); 

    if(count !== 0) { 
    bulk.execute(); 
    } 
} 

的代碼,但它會產生一個錯誤:Cannot call method 'forEach' of undefined

那麼,應該怎麼辦?

回答

2

好了,經過一些研究,我發現類似的問題,在這裏我就是這樣做,以使這項工作:

var aggregate = Meteor.wrapAsync(collection.aggregate, collection); 

然後

aggregate(parameters).forEach(...);