有时候我们会通过mongo shell 运行一些脚本,去执行更新或运维需求。mongo shell 可执行的代码可以实现比较复杂的功能,代码也可以比较丰富。当执行报错时,如果可以快速定位到错误点,对解决bug, 可以事半功倍。

我们先测试一下:

Case 1 简单的向集合中插入一笔数据

执行代码:

db.testdecimal.insert({“val”: NumberDecimal( “9.99” )})

报错信息:

--16T14::51.349+ E QUERY    [js] SyntaxError: illegal character @(shell):1:23

Case 2 将上面的代码包在一个 for 循环中

执行代码:

for (var i =; i<; i++){db.testdecimal.insert({“val”: NumberDecimal( “9.99” )})}

报错信息:

--16T14::00.900+ E QUERY    [js] SyntaxError: illegal character @(shell):1:48

Case 3 将Case中的代码换成两行

for (var i =;
... i<; i++){db.testdecimal.insert({“val”: NumberDecimal( “9.99” )})}

报错信息

--16T14::54.577+ E QUERY    [js] SyntaxError: illegal character @(shell):2:33

经过排错定位,错误为 “val” 中的“”是中文双引号。将至更新为英文。

Case 4 

for (var i =; i<; i++){db.testdecimal.insert({"val": NumberDecimal( “9.99” )})}

报错信息:

--16T14::29.110+ E QUERY    [js] SyntaxError: illegal character @(shell):1:70

再次排查,错误为 “9.99” 中的“”是中文双引号。将至更新为英文。

Case 5

for (var i =; i<; i++){db.testdecimal.insert({"val": NumberDecimal( "9.99" )})}

执行OK:

WriteResult({ "nInserted" :  })

我们回头,再仔细看下。错误信息中最后的数字信息(红色标注)。

1:23 ; 1:48 ; 2:33 ; 1:70 。
其实这些数字,已经标注了,错误位于第几行,第几个字符。:(冒号)前,代表错误位于的行数;
:(冒号)后,代表错误位于本行第几个字符。 但需要留意,这是在错误类型为 SyntaxError 情况下成立的。SyntaxError :代表尝试解析语法上不合法的代码的错误。当Javascript语言解析代码时,Javascript引擎发现了不符合语法规范的tokens或token顺序时抛出SyntaxError。 如果我们用一个未定义的函数或是函数名写错了或是什么样子呢? Case 6
执行代码:
db.testdecimal.find().preetty()

错误信息:

--16T15::37.501+ E QUERY    [js] TypeError: db.testdecimal.find(...).preetty is not a function :
@(shell):1:1

如需将错误代码嵌套到其他语句中呢?

Case 7

执行代码:

for (var i =;
i<; i++){db.testdecimal.find().preetty()}

错误信息:

--16T15::37.532+ E QUERY    [js] TypeError: db.testdecimal.find(...).preetty is not a function :
@(shell):2:11

mongo 没有
preetty()函数,只有 pretty()方法,它的作用是 使得查询出来的数据在命令行中更加美观的显示,不至于太紧凑。

我们看到此类的错误类型是 TypeError,用来表示值的类型非预期类型时发生的错误。当传入函数的操作数或参数的类型并非操作符或函数所预期的类型时,将抛出一个 TypeError 类型错误。

此类错误,抛出的数字,第一个还是错误所在的行数,而第二个就不是了,它是把后面的功能实现当成了一个点。

一句话总结:解决bug时,充分重视返回的错误信息。

本文版权归作者所有,未经作者同意不得转载,谢谢配合!!!

mongo shell 通过返回信息定位错误点的更多相关文章

  1. Linux Shell 函数返回值

    Shell函数返回值,常用的两种方式:return,echo 1) return 语句 shell函数的返回值,可以和其他语言的返回值一样,通过return语句返回. 示例: #!/bin/sh fu ...

  2. Spring Cloud项目中通过Feign进行内部服务调用发生401\407错误无返回信息的问题

    问题描述 最近在使用Spring Cloud改造现有服务的工作中,在内部服务的调用方式上选择了Feign组件,由于服务与服务之间有权限控制,发现通过Feign来进行调用时如果发生了401.407错误时 ...

  3. mongo Shell初体验

    mongo shell是一个MongoDB的交互式JavaScript接口.您可以使用mongo shell来查询和更新数据以及执行管理操作. 打开cmd命令行,输入mongo,就可以进入mongo ...

  4. Linux Shell函数返回值

    转:http://blog.csdn.net/ithomer/article/details/7954577 Shell函数返回值,一般有3种方式:return,argv,echo 1) return ...

  5. 2.Access the mongo Shell Help-官方文档摘录

    总结: 1.使用help可以查看帮助信息db.help()  help等 2.查看对应的实现方法.比如 test@gzxkvm52$ db.updateUser function (name, upd ...

  6. 图解Mongo Shell的使用

    mongo shell是一个MongoDB的交互式JavaScript接口.您可以使用mongo shell来查询和更新数据以及执行管理操作. 本篇经验将和大家介绍Mongo Shell的使用方法,希 ...

  7. mongo shell

    mongo shell mongo 连接 本地 mongo # 连接127.0.0.1:27017 远程 mongo "mongodb://mongodb0.example.com:2801 ...

  8. MongoDB ServerStatus返回信息

    ServerStatus返回信息 ServerStatus返回mongodb中很多信息 http://docs.mongodb.org/manual/reference/command/serverS ...

  9. MongoDB error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js(转)

    rror: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js 一般这种情况就是:自己指定的数据库,所以不能.自动加 ...

随机推荐

  1. Task 的一些个人见解

    Task确实比较好用且优雅 我感觉.NET要成为艺术家... public class TheTask { /// <summary> /// 直接调用是同步方法 /// </sum ...

  2. 【Java Web开发学习】远程方法调用RMI

    Java RMI 远程方法调用Remote Method Invocation 转载:http://www.cnblogs.com/yangchongxing/p/9078061.html 1.创建远 ...

  3. nginx代理grafana

    希望通过Nginx为服务器上的grafana进行代理,实现通过在当前域名后加/grafana在公网进行访问,开始按照百度的方法弄了几个小时都不行,后面仔细看了官方的文档才弄好,Mark一下. Ngin ...

  4. django基础之day09,创建一个forms表单组件进行表单校验,知识点:error_messages,label,required,invalid,局部钩子函数,全局钩子函数, forms_obj.cleaned_data,forms_obj.errors,locals(), {{ forms.label }}:{{ forms }},{{ forms.errors.0 }}

    利用forms表单组件进行表单校验,完成用户名,密码,确认密码,邮箱功能的校验 该作业包含了下面的知识点: error_messages,label,required,invalid,局部钩子函数,全 ...

  5. OPCode 详解

    OpCode 操作码(Operation Code, OPCode):描述机器语言指令中,指令要执行某种操作的机器码 OPCode在不同的场合中通常具有不同的含义,例如PHP虚拟机(Zend VM). ...

  6. 【并发编程】Java并发编程传送门

    本博客系列是学习并发编程过程中的记录总结.由于文章比较多,写的时间也比较散,所以我整理了个目录贴(传送门),方便查阅. [并发编程系列博客传送门](https://www.cnblogs.com/54 ...

  7. Mysql基于Mysql Cluster+MysqlRouter的集群部署方案

    http://note.youdao.com/noteshare?id=a61c4a6ff2b76e5305430eb66eb116e2&sub=4B4B6E8D0E2849F9B0DFB67 ...

  8. C++ lambda expression

    Emerged since c++11, lambda expression/function is an unnamed function object capable of capturing v ...

  9. MySQL密码正确却无法本地登录-1045 Access denied for user 'root'@'localhost' (using password:YES

    MySQL密码正确却无法本地登录 报错如下: ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password ...

  10. centos安装redis并开启多个redis实例

    1.下载安装包       下载地址 :  http://download.redis.io/releases/,去里面找对应的版本下载        例如  wget http://download ...