Node.js 文档插入中的调用函数

Node.js 文档插入中的调用函数,node.js,mongodb,Node.js,Mongodb,我正在尝试创建“服务器端函数”(在MongoDB中加载的自定义JS函数)。 其主要思想是使用函数getNextSequence(collectionName),该函数返回此集合的自动增量id。诀窍是为每个集合使用单独的集合“计数器”和文档,该集合保持自动增量状态 无论如何,我已经在Mongo中创建并加载了该函数,它通过Mongo shell运行良好: db.users.insert( { _id: getNextSequence("userid"), name: "Sa

我正在尝试创建“服务器端函数”(在MongoDB中加载的自定义JS函数)。 其主要思想是使用函数getNextSequence(collectionName),该函数返回此集合的自动增量id。诀窍是为每个集合使用单独的集合“计数器”和文档,该集合保持自动增量状态

无论如何,我已经在Mongo中创建并加载了该函数,它通过Mongo shell运行良好:

db.users.insert(
   {
     _id: getNextSequence("userid"),
     name: "Sarah C."
   }
)
它还通过eval从NodeJS开始工作:

db.eval('getNextSequence(\'test\')', function(err, result){...});
但我不知道,当从NodeJS插入时,如何在文档中内联使用它。 我不能写:

   {
     _id: getNextSequence("userid"),
     name: "Sarah C."
   }
因为这将期望getNextSequence是NodeJs方法。NodeJS+MongoDB中是否有用于此的表达式形式?
谢谢

您需要按照上面指定的方式在节点中调用它,然后使用插入中返回的值

db.eval('getNextSequence(\'test\')', function(err, result) {
  db.users.insert({
      _id: result,
      name: "John Doe"
      ...
    }, function(err, result) {
         ...
    }})
});
对于更清晰的语法,您可以尝试使用npm包mongo触发器:


在post方法中设置一个需要db的变量:
var db=req.db
然后为数据库集合声明一个变量:
var collection=db.get('counter')
然后插入您的项目:
collection.insert({ _id: getNextSequence("userid"), name: "Sarah C." }, function (err, doc) { if (err) { // DO SOMETHING } else { // DO SOMETHING } }); collection.insert({ _id:getNextSequence(“用户id”), 姓名:“莎拉C。” },函数(错误,文档){ 如果(错误){ //做点什么 } 否则{ //做点什么 }
});

我希望我可以省去这个db呼叫,但我认为这是驱动程序db引擎的事情,没有更好的了。谢谢。@ooouii-我想唯一的其他选择是用这样的东西扣动你自己的扳机:哇,我不知道这个:),谢谢。现在,为了清晰起见,我牺牲了这一点,但这对于将来的一些用例来说可能很方便。我会看看,如果通过性能测试。也许另一种方法是将整个插件放入eval。在这种情况下,在其中包含函数调用没有问题。但是对于一些nosql注入来说,它是不可操作的。
eval()
isdeprecated@LHCHIN-请随时提供正确的解决方案/编辑答案。这个答案已经将近7年了,所以祈祷吧,毫无疑问,有更好的方法可以做到这一点。谢谢你的提示,我可能解释得不好。通过这种方式,我们无法克服这个问题,NodeJS将尝试调用函数getNextSequence,它是在mongoDb中定义的,而不是在NodeJS中定义的。