Javascript 如何在mongo go驱动程序中使用js函数
目标是在某些集合中实现计数器字段(某种自动递增)。 我可以通过mongoshell保存此功能: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
> 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 })