【问题标题】:MongoDB script execute queries stored in variableMongoDB脚本执行存储在变量中的查询
【发布时间】:2016-06-15 12:14:51
【问题描述】:

我的 .js 脚本从包含 mongodb 查询的文件中读取,并将其填充到数组中。然后我读取了该数组并执行了查询,但它们没有被执行。下面是我的代码。

1. //After successfuly connecting to mongodb
2. //read a file containing queries
3. var queryFile = cat("queries.txt");
4. var queries = queryFile.split("\r\n");
5. var length = queries.length;
6. for(var i = 0; i < length; i++){
7.        var start = new Date().getTime()
8.        queries[i]
9.        var end = new Date().getTime();
10.        var timeElapsed = (end - start)/1000;
11.        print ( "Time taken to run query : "+timeElapsed+" secs" )
12. }

仅当我将第 12 行替换为实际查询时才有效,例如db.coll.count()

【问题讨论】:

  • queries[i] 只是一个字符串。我的猜测是用eval(queries[i]) 评估该字符串。即使'eval is evil'之类的。
  • 好吧,成功了,但为什么 eval 是邪恶的。
  • 哦,这是一场古老的辩论。基本上,eval 允许代码注入,方法是运行传递给它的任何内容。看thisthat
  • 很好,你能起草一个答案然后我会接受。
  • 好主意 :) 这样做了。

标签: javascript mongodb mongodb-shell


【解决方案1】:

queries[i] 只是一个字符串。这是一个字符串化的指令。我的猜测是用eval(queries[i]) 来评估它。

for(var i = 0; i < length; i++){
        var start = new Date().getTime()
        eval(queries[i]);
        var end = new Date().getTime();
        var timeElapsed = (end - start)/1000;
        print ( "Time taken to run query : "+timeElapsed+" secs" )
 }

但是,人们经常说eval is evil,并且只能在不得已的情况下使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-07
    • 2017-09-23
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多