在学习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 }
>

mogodb 的自定义函数定义及引用相关推荐

  1. linux 变量函数返回值,linux shell 自定义函数(定义、返回值、变量作用域)介绍...

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ f ...

  2. python不需要定义函数后使用_python自定义函数可以向前引用不用声明

    原博文 2017-01-31 16:35 − #有些编程语言不够"聪明",向这类向前引用的方式会导致报错,但Python足够"醒目",这段代码是正确的! def ...

  3. linux shell 自定义函数(定义、返回值、变量作用域)介绍

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ f ...

  4. linux无filelength函数,Linux Shell 自定义函数(定义、返回值、变量作用域)介绍

    定义Shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 可以带function f ...

  5. python可以不用主函数吗_python自定义函数可以向前引用不用声明

    Careercup - Microsoft面试题 - 6543214668414976 2014-05-11 02:56 题目链接 原题: Write a function called FooBar ...

  6. 流水号结合自定义函数实现申请业务

    需求: 客户有个需求是想利用行式填报表的流水号来进行一个申请业务的处理(主键自动生成).但是在行式填报表中对流水号的触发只能在行式报表的插入功能的进行触发,这对于刚进入报表展现页面自动展现第一条记录就 ...

  7. php基础教程 第九步 自定义函数

    自定义函数 在之前的课程我们有使用到php的系统函数,这些函数由系统定义.在开发中,有时候系统自带的函数满足不了我们开发时(或其它情况),我们可以自定义函数.顾名思义,自定义函数就是自己定义函数. 自 ...

  8. mysql自定义存储过程_MySQL自定义函数、触发器、存储过程

    存储过程 概念 存储过程,是一个数据库对象,类似一个函数. 在存储过程中可以使用SQL中的绝大部分内容,并且可以加入编程语言的特性(循环判断分支). 编写好存储过程之后,可以在客户端调用存储过程,存储 ...

  9. matlab调用sh函数,Shell 函数定义与调用

    linux shell 可以用户定义函数,然后在 shell 脚本中可以随便调用. 以一个计算两数之和的函数为例: #! /bin/bash # 函数定义 sum(){ return $(($1+$2 ...

最新文章

  1. AspNetPager分页控件
  2. 机器学习--Hoeffding Inequality--界定概率边界
  3. Android常见面试题(一)
  4. PHP中的call_user_func_array
  5. input 赋值_FPGA基础设计:Verilog行为级建模(过程赋值)
  6. Hyperledger中数据存取的实现
  7. iOS 自带二维码扫描功能的实现
  8. 个人品牌这个事情,适用于长期主义者
  9. sir模型matlab案例_下一代矩阵法amp;微分方程稳定性——以SIR系列为例
  10. linux格式化分区error,linux格式化磁盘出错
  11. 2018美国大学计算机科学,美国大学计算机2018最新排名
  12. 一看就懂系列:什么是相速度与群速度
  13. ARPG游戏中怪物AI实现
  14. 数字图像处理(入门篇)十四 透视变换
  15. 非对称加密实战(一):JDK生成keystore获取公钥私钥及代码验证【附源码】
  16. 初涉VB.NET入门级代码积累
  17. 读“王东升 新时空 硅碳融合的产业革命”拙见
  18. Redis集群之多主多从
  19. 【JZOJ A组】凯旋而归
  20. 15、【华为HCIE-Storage】--多路径技术

热门文章

  1. mybatis分页插件PageHelper简单应用
  2. javascript立体学习指南
  3. Round A - Kick Start 2019
  4. CentOS下开启配置端口转发
  5. [转载][记录]javascript生成不重复的随机数
  6. lamp环境搭建经验总结
  7. Struts-config.xml配置文件《action-mappings》元素的详解
  8. winform技巧一,errorprovider,任务栏可见,总在最前
  9. Missing you is a kind of my deep-pain in my life
  10. STM32F0xx_SPI读写(Flash)配置详细过程