2014-09-20 155 views
0

我想創建「服務器端功能」根據autoincrement tutorial(自定義JS功能蒙戈DB加載)。 主要思想是具有函數getNextSequence(collectionName),該函數返回此collection的自動增量id。訣竅是爲每個收藏分別收集「計數器」和文檔,該文檔保存自動增量狀態。呼叫功能插入

反正,我已經創建並加載在蒙戈該功能,它通過蒙戈外殼很好地工作:

db.users.insert(
    { 
    _id: getNextSequence("userid"), 
    name: "Sarah C." 
    } 
) 

這也從通過的NodeJS EVAL工作:

db.eval('getNextSequence(\'test\')', function(err, result){...}); 

但我不能當從NodeJS插入時,如何在文檔中內聯使用它。 我不能寫:

{ 
    _id: getNextSequence("userid"), 
    name: "Sarah C." 
    } 

,因爲這會期望getNextSequence是方法的NodeJS。 NodeJS + MongoDB中有這種表達形式嗎? 謝謝!

回答

0

你需要調用它節點您在上面指定的方式,然後使用在你插入的返回值。

db.eval('getNextSequence(\'test\')', function(err, result) { 
    db.users.insert({ 
     _id: result, 
     name: "John Doe" 
     ... 
    }, function(err, result) { 
     ... 
    }}) 
}); 

爲了更清晰的語法,你可以嘗試使用NPM包蒙戈的觸發器:

https://www.npmjs.org/package/mongo-triggers

+1

我希望我可以放過這個分貝的電話,但我客串是驅動程序數據庫引擎的事情,沒有什麼更好的是可用的。謝謝。 – ooouuiii 2014-09-21 18:06:42

+0

@ooouuiii - 我認爲唯一的選擇將是像這樣的東西滾你自己的觸發(S): http://danielweberonline.wordpress.com/2012/05/14/creating-triggers-for-mongodb/ – TMan 2014-09-23 03:35:48

+1

哇,我不知道這個:),謝謝。目前我只是爲了清晰而犧牲了這一呼叫,但對於未來的某些用例而言,這可能會很方便。我會看到,如果通過性能測試。也許另一種方式可能是整個插入到eval。在這種情況下,包含函數調用沒有問題。但是這對於一些nosql注入來說是可以忍受的。 – ooouuiii 2014-09-23 17:32:33

0
在POST方法

設置需要DB的變量:
變種DB = REQ。 D b;
然後爲你的db集合聲明一個變量:
var collection = db.get('counter');
然後插入您的項目:

 collection.insert({ 
     _id: getNextSequence("userid"), 
     name: "Sarah C." 
     }, function (err, doc) { 
      if (err) { 
       // DO SOMETHING 
      } 
      else { 
       // DO SOMETHING 
      } 
     });

+0

感謝您的提示,我可能對此解釋得很差。通過這種方式,我們沒有解決問題,即NodeJS將嘗試調用函數getNextSequence,它在mongoDb中定義,而不是在NodejJ中。 – ooouuiii 2014-09-21 18:10:38