2014-01-19 58 views
1

我已經創建了序列函數。MongoDB中的序列

function getNextSequence(name) { 
    var ret = db.counterTest.findAndModify(
      { 
      query: { _id: name }, 
      update: { $inc: { seq: 1 } }, 
      new: true 
      } 
    ); 
    return ret.seq; 
} 

但是,當我嘗試插入記錄其給出的錯誤。

db.counterTest.insert(
{ 
_id: getNextSequence("userid"), 
    name: "TestStudent" 
} 
) 
ReferenceError: getNextSequence is not defined (shell):3 

我在哪裏做錯了?

謝謝

+0

其分配給像'F',並從那裏 – Sammaye

回答

1

這隻適用於mongo shell。您將需要插入第一個序列文件開始:

db.counterTest.insert({_id: "userid", seq: 0}); 

之後將插入達到預期效果:

db.counterTest.insert({ 
    _id: getNextSequence("userid"), 
    name: "TestStudent" 
}); 

這在蒙戈外殼爲我工作。版本:

> version() 
2.4.9 
+0

由於其工作運行它,但同樣沒有工作,Robomongo奇怪.. – zdhim

+0

奇怪的工作確實。他們聲稱:「Robomongo嵌入了爲MongoDB的mongo shell提供動力的相同的JavaScript引擎。您可以在mongo shell中編寫所有內容 - 您可以在Robomongo中編寫!所以也許你應該向他們開放一個問題。 –

0

我得到了同樣的問題,使用Robomongo。我解決它在shell上手動創建函數。

右鍵單擊數據庫 - >打開Shell。

db.system.js.save({ 
    _id : "getNextSequence" , 
    value : function (name) { 
    var ret = db.counters.findAndModify({ 
     query: { _id: name }, 
     update: { $inc: { seq: 1 } }, 
     new: true 
    }); 
    return ret.seq; 
    } 
}); 
1

您應該首先運行loadServerScripts(),然後您可以使用自定義函數。

db.loadServerScripts(); 
db.counterTest.insert({ 
    _id: getNextSequence("userid"), 
    name: "TestStudent" 
}) 
+1

請不要發佈代碼只有答案。請參閱http://meta.stackexchange.com/a/148274/243457。 – Rafa

+0

好的,我已經修改了答案,謝謝提醒。 – zhaozhiming