Nodejs:windows下,mongo.exe直接读取js文件的问题

Nodejs:windows下,mongo.exe直接读取js文件的问题

刚准备学mongodb,看到他是js的语法,就准备直接让他去读js文件,配合sublime的build使用。 问题来了: 比方说foo.js里的内容是db,db.test.find(),都可以顺利执行。 如果foo.js里的内容是show dbs,use mydb,提示 SyntaxError: Unexpected identifier。 如何是好?

我以为是空格问题,但是如果这么写,有空格,有换行,还是能执行:
<code>var item = {name: ‘john’}</code>
<code>db.test.insert(item)</code>


2 回复

Nodejs:Windows下,MongoDB直接读取JS文件的问题

问题描述

最近开始学习MongoDB,并且希望直接通过MongoDB的命令行工具mongo.exe来读取并执行JS文件。但是在尝试过程中遇到了一些问题,特别是在处理特定的MongoDB命令时出现了语法错误。

具体问题

假设有一个名为foo.js的文件,其中包含以下内容:

show dbs
use mydb

当你试图通过mongo.exe执行这个文件时,会遇到以下错误:

SyntaxError: Unexpected identifier

解释与解决方案

这个问题主要是由于MongoDB的JavaScript shell(mongo.exe)在解析某些MongoDB命令时会遇到语法错误。这是因为这些命令并不是标准的JavaScript语法,而是MongoDB特定的shell命令。

解决方案:

  1. 使用MongoDB的shell命令:MongoDB的shell命令需要以db.runCommand()的形式来执行,这样可以避免语法错误。例如,你可以将上述命令修改为:

    db.runCommand({ listDatabases: 1 })
    use mydb
    
  2. 直接使用.js文件中的标准JavaScript操作:如果你只是想插入或查询数据,可以直接使用标准的JavaScript操作,如:

    var item = { name: 'john' }
    db.test.insert(item)
    
  3. 确保文件编码正确:有时候编码问题也会导致类似的错误。确保你的JS文件使用的是UTF-8编码。

  4. 使用正确的命令执行方式:确保你是在正确的目录下运行mongo.exe,并且文件路径正确。例如:

    mongo localhost:27017/mydb < foo.js
    

示例代码

下面是一个完整的示例,展示了如何通过JS文件正确执行MongoDB命令:

// foo.js
db.runCommand({ listDatabases: 1 }) // 执行MongoDB命令
use mydb                          // 切换数据库
db.test.insert({ name: 'john' })  // 插入文档

然后在命令行中执行:

mongo localhost:27017 < foo.js

通过这种方式,你可以避免语法错误,并且能够顺利地执行MongoDB命令。


在 Windows 下使用 mongo.exe 执行 JavaScript 文件时遇到的问题,通常是因为 MongoDB shell 的语法与标准 JavaScript 语法存在差异。mongo.exe 使用的是一个特殊的 JavaScript 环境,它有自己的命令和语法规则。

解释

  1. MongoDB Shell 语法:MongoDB shell (mongo.exe) 使用了一些特定的命令,例如 show dbsuse mydb,这些命令不能直接作为普通的 JavaScript 代码运行。你需要通过 MongoDB shell 的特殊方式来执行这些命令。

  2. JavaScript 语法限制:虽然 db.test.find() 可以正常执行,但 show dbsuse mydb 这样的命令在标准 JavaScript 中是无效的,因为它们不是有效的 JavaScript 语法。

解决方法

方法一:使用 MongoDB shell 特定的命令文件

你可以创建一个 .js 文件,然后在 MongoDB shell 中直接执行该文件。

// foo.js
db.test.find().forEach(printjson);

use mydb;
db.test.insert({ name: 'john' });

在命令行中执行:

mongo foo.js

方法二:使用 load 命令

你可以在 MongoDB shell 中加载并执行 .js 文件中的内容。

  1. 打开 MongoDB shell:

    mongo
    
  2. 加载并执行脚本:

    load("path/to/foo.js");
    

示例代码

假设你的 foo.js 文件内容如下:

// foo.js
db.test.find().forEach(printjson);
use mydb;
db.test.insert({ name: 'john' });

在命令行中执行:

mongo foo.js

这样可以确保所有的 MongoDB 特定命令都能被正确执行。

总结

MongoDB shell 有自己的特定语法和命令,不能直接用普通 JavaScript 文件的方式执行。使用 mongo.exe 时,可以通过 load 命令或者直接执行 .js 文件来解决这个问题。

回到顶部