mogodb 的自定义函数定义及引用

前端之家收集整理的这篇文章主要介绍了mogodb 的自定义函数定义及引用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在学习MONGODB 遇到以下问题: 函数 getNextSequence 生成序列号,官方方法: 建立一张表,记录某一个表的_ID 当前值。后面调用函数生成下一个序列号, 在测试此函数时,遇到以下问题: (url:http://docs.mongodb.org/manual/t ... incrementing-field/) > function getNextSequence(name) { ... var ret = db.counters.findAndModify( ... { ... query: { _id: name },... update: { $inc: { seq: 1 } },... new: true ... } ... ); ... ... return ret.seq; ... } 直接调用,没有问题 > getNextSequence("userid"); 17 退出后,再进来,此函数不见了,是没有保存吗?那前面的定义只是临时的??? 这点没明白。如果是此时没有保存,其存在的方法有什么意义?这点还真是和其它数据库区别很大。 > exit bye [root@localhost bin]# ./mongo-start.sh MongoDB shell version: 2.5.5 connecting to: 127.0.0.1:28001/test Server has startup warnings: 2014-02-19T10:00:20.412+0800 [initandlisten] 2014-02-19T10:00:20.412+0800 [initandlisten] ** NOTE: This is a development version (2.5.5) of MongoDB. 2014-02-19T10:00:20.412+0800 [initandlisten] ** Not recommended for production. 2014-02-19T10:00:20.413+0800 [initandlisten] > getNextSequence("userid"); 2014-02-19T14:11:10.499+0800 ReferenceError: getNextSequence is not defined 再用 保存到DB.SYSTEM.JS 的方式保存自定义函数(或叫存储过程): db.system.js.insert( {_id:"getNextSequence",value:function getNextSequence(name) { var ret = db.counters.findAndModify( { query: { _id: name },update: { $inc: { seq: 1 } },new: true } ); return ret.seq; } }); 但再使用同前面的调用 方式无效了。 > getNextSequenct("userid"); 2014-02-19T14:21:03.912+0800 ReferenceError: getNextSequenct is not defined > 虽然查到以下方法进行调用,但感觉很是怪。 > db.eval('getNextSequence("userid")'); 18 > db.testdb.insert({_id:db.eval('getNextSequence("userid")')}); SingleWriteResult({ "writeErrors" : [ ],"writeConcernErrors" : [ ],"nInserted" : 1,"nUpserted" : 0,"nUpdated" : 0,"nModified" : 0,"nRemoved" : 0,"upserted" : [ ] }) > db.testdb.find(); { "_id" : 19 } >

猜你在找的NoSQL相关文章