有时候我们会通过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. BOM对象学习

    location,history,screen <!DOCTYPE html> <html> <head> <meta charset="utf-8 ...

  2. Ganglia与Centreon整合构建智能化监控报警平台

    一.智能运维监控报警平台的组成 随着大数据时代的来临,运维工作的难度越来越大,每个运维人员都要面临不计其数的服务器和海量的数据,如何保证众多服务器和业务系统稳定高效地运行并尽量减少死机时间,成为考核运 ...

  3. wxxcx_learn独立验证与REST

    模块,控制器,方法 validate  接口参数校验 独立验证(验证器对独立验证做了更好的封装) $date = [ 'name' => '111', 'email' => '123@qq ...

  4. 2019年Dubbo你掌握的如何?快看看这30道高频面试题!

    前言 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式 ...

  5. 2019年Java并发精选面试题,哪些你还不会?(含答案和思维导图)

    Java 并发编程 1.并发编程三要素? 2.实现可见性的方法有哪些? 3.多线程的价值? 4.创建线程的有哪些方式? 5.创建线程的三种方式的对比? 6.线程的状态流转图 7.Java 线程具有五中 ...

  6. dart入门指南

    近来,flutter的热度在上升.flutter应用的主要开发语言是dart, 因此,欲练flutter, 必先了解dart. dart是由google开发的编程语言,可用于开发移动应用,桌面应用,h ...

  7. let和const总结(ES6)

    文章目录 let const 1. let要好好用 1. 基本用法 2. let声明的变量不存在变量提升 3. TDZ(temporal dead zone)暂时性死区 4. 不允许重复声明 2. 块 ...

  8. python:json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes问题解决

    有如下一个文件,内容如下 { "test1": "/root/test/test1.template", "test2": "/r ...

  9. 【CV现状-3.1】图像分割

    #磨染的初心--计算机视觉的现状 [这一系列文章是关于计算机视觉的反思,希望能引起一些人的共鸣.可以随意传播,随意喷.所涉及的内容过多,将按如下内容划分章节.已经完成的会逐渐加上链接.] 缘起 三维感 ...

  10. 秒杀系统(一)----环境搭建及集成Mybatis、Redis

    1.1 环境搭建--pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=& ...