2014-09-20 157 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