2014-01-19 24 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