2014-02-08 105 views
0

查找只插入項目我嘗試定期獲取從多個端點飼料和循環這些批次的產品,做與UPSERT更新:真。MongoDB的:在UPSERT

對於我檢查的項目

,如果它已經MyCollection中的URL的每個項目,它更新了「END_DATE」

,如果它是新的,它被插在MyCollection的與「起始日期」使用$ setOnInsert

我的問題是:我怎樣才能在從MyCollection的一個UPSERT只得到插入的項目?

我試過findAll $,其中start_date = end_date但是$setOnInsert: { start_date: end_date }沒有使兩個日期完全相等。即使這種解決方案的運作方式與我之前提出的問題相同,但這種解決方案效率不高尋找最佳實踐。謝謝!

這裏是我的代碼:

var now = new Date(); ///???????? I thought this was cached?? 
for (var i = batch.length - 1; i >= 0; i--) { 
     batch[i].end_date = now; 
     myCollection.update({'url': batch[i].url}, {$setOnInsert: { start_date: batch[i].end_date }, $set: batch[i]}, {safe:true, upsert : true}, function(err, result) { 
      if(err) { console.log(err); return; } 
      console.log(result); //result doesn't give any clue about inserts 
     }); 

回答

0

GetLastError函數繼UPSERT操作應該提供你它是否插入或更新的詳細信息。如果您使用的驅動程序/框架沒有公開這些值,我會建議向維護人員提出請求。

+0

db.getLastErrorObj(); '{的 「n」:0 「的ConnectionId」:581, 「ERR」:空, 「OK」:1}'這是正確的使用情況?我使用本地node.js mongo驅動程序,你知道任何公開這些細節的驅動程序/框架? – user3211198

0

你正在尋找的結構是getLastError,其中插入發生對象ID將在字段中的一個被退回。所有的解釋取決於你正在做的操作。

對於節點本地驅動程序的功能的文檔是here。大多數驅動程序由MongoDB員工維護,因此他們肯定會遵守這些標準。