【问题标题】:Execute mongo query with parameter through shell scripts, is it possible?通过shell脚本执行带参数的mongo查询,可以吗?
【发布时间】:2016-01-02 09:07:36
【问题描述】:

我不知道这是否可能,我可以看到在 mongo eval 查询中使用 bash 参数可能存在问题。我想要做的是更新 mongo 中值 date 大于今天日期的文档。

示例:今天的日期小于(

我有以下内容,但我想知道如何将日期变量传递给 mongo 查询。甚至可能吗?有没有其他方式可以去罗马?

#!/bin/sh
today="$(date +'%Y-%m-%d')"

mongo db --eval 'db.Scheme.update({"FutureDate":{$gte: $today}},{$set:{"X":"$today"}});'

或者,我尝试使用 new Date().setHours(0,0,0,0) 切换 $today,但无法执行查询。

非常感谢帮助或建设性反馈,谢谢! :)

【问题讨论】:

  • shell 变量不会在单引号中展开。尝试将变量括在双引号内,例如 command 'previous'"$var"'next"
  • 感谢@user000001!作为一个魅力,嗯,不知道为什么我没有尝试过,知道如何将 $today 作为真正的日期值吗?而不是作为字符串?与 javascript 一样,var from = ISODate("2011-11-24") 知道如何在 shell/bash 中做同样的事情吗?
  • 我不认为你可以从 bash 中做到这一点。您可能必须从 mongo 执行此操作,但我不知道如何...

标签: bash mongodb shell parameter-passing


【解决方案1】:

尝试关注

#!/bin/bash
Value="Example"

mongo databaseurl:port/database -u username -p password --eval  \ 
"db.Scheme.update({\"FutureDate\":{$gte: new Date()}},{$set :{\"X\":\"${Value}\"}},\{multi:true});"

【讨论】:

    【解决方案2】:

    我找到了解决问题的方法,它解决了(我会说 95%)我的情况。我发现我不需要传递参数,尽管我可以在测试时在 mongo 查询中使用 '"$variable"' 来做到这一点(有关更多信息,请参阅传递变量)。

    我的查询解决方案如下(不包括传递变量):

    db.Scheme.update({"FutureDate":{$gte: new Date()}},{$set :{"X":Value}},{multi:true});

    {multi:true} 允许 Scheme 中的所有文档循环。

    脚本中的完整查询

    !/bin/sh

    mongo databaseurl:port/database -u username -p password --eval 'db.Scheme.update({"FutureDate":{$gte: new Date()}},{$set :{"X":Value}},{multi:true});'

    传递变量(示例):

    !/bin/sh

    值="示例"

    mongo databaseurl:port/database -u username -p password --eval 'db.Scheme.update({"FutureDate":{$gte: new Date()}},{$set :{"X":'"$Value"'}},{multi:true});'

    希望它也可以帮助其他人!感谢 user000001 一路上的帮助:)

    【讨论】:

      猜你喜欢
      • 2015-11-01
      • 2011-06-17
      • 1970-01-01
      • 2014-01-25
      • 2021-08-30
      • 1970-01-01
      • 2011-10-09
      • 2015-02-28
      • 2014-10-06
      相关资源
      最近更新 更多