Javascript 如何在mongo go驱动程序中使用js函数

Javascript 如何在mongo go驱动程序中使用js函数,javascript,mongodb,go,Javascript,Mongodb,Go,目标是在某些集合中实现计数器字段(某种自动递增)。 我可以通过mongoshell保存此功能: > db.system.js.save({ _id: "getValueForNextSequence", value : function(fieldName){ var sequenceDoc = db.counters.find({sequenceName: fieldName }).toArray()[0]; if (sequenceDoc.sequence > 9

目标是在某些集合中实现计数器字段(某种自动递增)。 我可以通过mongoshell保存此功能:

> db.system.js.save({
 _id: "getValueForNextSequence",
 value : function(fieldName){
    var sequenceDoc = db.counters.find({sequenceName: fieldName }).toArray()[0];
  if (sequenceDoc.sequence > 9998){
     sequenceDoc =  db.counters.findAndModify({
      query:{sequenceName: fieldName },
      update: {$set:{sequence:1000}},
      new:true
    });
  }else {
    sequenceDoc =  db.counters.findAndModify({
      query:{sequenceName: fieldName },
      update: {$inc:{sequence:1}},
      new:true
    });
  }
  return sequenceDoc.sequence;
}
})
我有
计数器
集合,用于存储
getValueForNextSequence
的数据:

{fieldName:“shotID”,序列:0}

然后调用它(再次从shell调用):


但是我不明白如何使用官方的go mongo驱动程序执行同样的操作。

在go应用程序中,您不能只编写
getValueforNextSequence()
并在插入之前调用函数吗?如果您对这种方法有疑问,请提供您在Go中尝试过的方法。另外,值得注意的是,您的
find和modify
方法可能与其他并发进程冲突。我希望在mongoDB容器中执行此操作,因为有多个POD可以访问DB。关于函数本身,我刚刚从mongoDB复制了它。您是否需要类似于
getValueForNextSequence()的存储过程的东西?有没有理由不使用ObjectId?是的,我想使用类似sql过程的东西。我考虑过ObjectId字段,但它不能满足所有必要的选项,因为它有业务需求,指定字段的格式、重复频率和用户可读性。
 db.loadServerScripts()

> db.STORE.insert({
... "shortID":getValueForNextSequence("shortID"),
... "item_short_name": "DEF",
... "specification": "book",
... "category": "fictional",
... "seller": "best_buy",
... "network": "XYZ",
... "plan": "regular"
... })
WriteResult({ "nInserted" : 1 })