在mongodb中运行javascript脚本(.js文件),包括js中的另一个文件

时间:2014-03-07 11:21:11

标签: mongodb

我想编写一个用于插入和更新mongodb数据的长脚本。

  1. 是否可以调用包含脚本的外部js文件?
  2. 是否可以在运行的js文件中包含另一个js文件?

5 个答案:

答案 0 :(得分:88)

使用Load function

load(filename)

您可以直接从mongo shell调用任何 .js 文件,mongo将执行JavaScript。

示例mongo localhost:27017/mydb myfile.js

这将在mongo shell中执行myfile.js脚本,该脚本使用端口2701连接到mydb数据库 在localhost。

要加载外部js,您可以写

load("/data/db/scripts/myloadjs.js")

假设我们有两个js文件myFileOne.js和myFileTwo.js

<强> myFileOne.js

print('From file 1');
load('myFileTwo.js');     // Load other js file .

<强> myFileTwo.js

print('From file 2');

<强> MongoShell

>mongo myFileOne.js

<强>输出

From file 1
From file 2

答案 1 :(得分:5)

是的,你可以。 脚本文件的默认位置是data / db

如果您在其中放置任何脚本,则可以将其称为

load("myjstest.js")      // or 
load("/data/db/myjstest.js")

答案 2 :(得分:2)

另一种方法是在终端提示符下将文件传递到mongo。

$ mongo < myjstest.js

这将启动mongo会话,运行文件,然后退出。 但是不确定从第一个调用第二个文件。我还没有尝试过。

答案 3 :(得分:0)

用于运行mutilple js文件

#!/bin/bash
cd /root/migrate/

ls -1 *.js | sed 's/.js$//' | while read name; do
     start=`date +%s`
     mongo localhost:27017/wbars $name.js;
     end=`date +%s`
     runtime1=$((end-start))
     runtime=$(printf '%dh:%dm:%ds\n' $(($runtime1/3600)) $(($secs%3600/60)) $(($secs%60)))
     echo @@@@@@@@@@@@@ $runtime $name.js completed @@@@@@@@@@@
     echo "$name.js completed"
     sync
     echo 1 > /proc/sys/vm/drop_caches
     echo 2 > /proc/sys/vm/drop_caches
     echo 3 > /proc/sys/vm/drop_caches
done

答案 4 :(得分:0)

要调用外部文件,您可以使用:

  

加载(“路径\文件”)

示例:如果您的file.js文件位于“文档”文件中(在Windows操作系统上),则可以输入:

  

加载(“ C:\ users \用户名\ Documents \ file.js”)