2013-11-26 77 views

回答

0

使用此查詢

AAAModel.find(
       {'category' : category}, 
       { skip: 100,sort:{date: -1}}, 
       function(err, results) { 
        if (err) { 
         next(err); 
        } 
        if (result) { 
         result.remove(); 
        } 
}); 
+0

我該如何使用刪除方法?我想在執行查詢後刪除結果。 – user2945435

+0

更新了我的答案。 –

+0

'results'沒有刪除它們,而不是使用'results.forEach(R => r.remove())' –

0

正如我們所知,參數results是文件在你的find回調的數組,而不是一個單一的文件。因此您可以迭代它並逐個刪除項目,儘管這不是刪除文檔以獲得性能的最佳方式。

實際上,貓鼬Mode.remove可以用來刪除文件,但查詢條件不能跳過和排序,直到現在。

1

我有同樣的問題。 實際上在最近的貓鼬查詢中有刪除的方法。所以,理論上它可以工作是這樣的:

AAAModel.find({'category' : category}) 
    .skip(100) 
    .sort({date: -1}) 
    .remove(function(err, result) { 
    if (err) { 
    next(err); 
    } 
    if (result) { 
    console.log("Number of deleted records:" + result); 
    } 
}); 

但在我的情況下,該代碼刪除所有記錄 所以,可能的解決方案是

AAAModel.find({'category' : category}) 
    .select("_id") 
    .skip(100) 
    .sort({date: -1}) 
    .exec(function(err, idObjLst) { 
    if (err) { 
     return next(err); 
    } 
    var ids = idObjLst.map(function(idObj) { return idObj._id; }); 
    if (ids && ids.length > 0) { 
    AAAModel.remove({_id: {$in: ids}}).exec(function(err, result) { 
     console.log("Removed " + result + " elements"); 
    }); 
}); 

可能是相當昂貴雖然。

+0

好主意,但'ids'將文檔的數組,看起來像'{_id:物件}'所以我想你還需要使用'ids.map'來在'$ in'中使用'ids'到一個ObjectIds數組。 – JohnnyHK

+0

JohnnyHK:你當然也對,但這個代碼也可以工作(可能是由於貓鼬內部的迭代過程的具體情況)。我已經用貓鼬進行了測試3.8.22 – Loki

+0

有趣的是,3.8.23不適用於我 - 沒有任何東西被刪除。 – JohnnyHK

相關問題