有时候我们会通过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. python3如何随机生成大数据存储到指定excel文档里

    本次主要采用的是python3的第三方库xlwt,来创建一个excel文件.具体步骤如下: 1.确认存储位置,文件命名跟随时间格式 2.封装写入格式 3.实现随机数列生成 4.定位行和列把随机数写入 ...

  2. unordered_map / HashTable 的负载因子是什么意思

    // in C++ 前段时间在看一些关于这个的文章时遇到了一些问题:unordered_map / HashTable 的负载因子是什么意思 经过度娘的搜索,最后得出: 若设 Hash 表的桶数量为 ...

  3. ThreadLocal的进化——TransmittableThreadLocal

    上一篇文章中,我们谈到了 InheritableThreadLocal,它解决了 ThreadLocal 针对父子线程无法共享上下文的问题.但我们可能听说过阿里的开源产品TransmittableTh ...

  4. MFC unicode字符集与多字节字符集 问题之彻底终结!

    Unicode 和多字节字符集 (MBCS) 支持 Visual Studio .NET 2003   有些国际市场以大字符集来使用日文和中文等语言.为了支持这些市场的编程,Microsoft 基础类 ...

  5. php 温故而知新 好久不用 又得继续学习下

    1.php注释:/* */.//.#等三种方式2.echo:向浏览器输出字符串,echo其实是一个函数:返回值:无3.print:向浏览器输出字符串,它也是一个函数:返回值:整型.           ...

  6. 【Java Web开发学习】Servlet、Filter、Listener

    [Java Web开发学习]Servlet 转发:https://www.cnblogs.com/yangchongxing/p/9274739.html 1.Servlet package cn.y ...

  7. CCF-CSP题解 201709-3 JSON查询

    要求写一个小程序完成JSON查询的功能. 查询dfs就好了. 存储JSON对象用图(树)就好,把\(<key[],type,val[]>\)作为节点,然后又是字符串处理了. 其实就是个简化 ...

  8. pymysql的操作

    目录 python 操作mysql 安装pymysql 模块 sql注入问题 产生的原因 解决的方法 连接 查 增 修 删 索引 使用索引的作用 索引的本质 索引的底层原理 索引的种类 索引的创建 主 ...

  9. LAMPSecurity: CTF6 Vulnhub Walkthrough

    镜像下载地址: https://www.vulnhub.com/entry/lampsecurity-ctf6,85/ 主机扫描: ╰─ nmap -p- -sV -oA scan 10.10.202 ...

  10. PromiseKit基本使用及源码解析

    Promise处理一系列异步操作的应用框架,能够保证顺序执行一系列异步操作,当出错时可以通过catch捕获错误进行处理.Promise框架也是很好的诠释了swift的面相协议编程以及函数式编程 两种类 ...