通过shell脚本用参数执行mongo查询,有可能吗?

时间:2015-10-05 16:16:54

标签: bash mongodb shell parameter-passing

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

示例:今天的日期比明天日期少(<),因此更新同一文档的字段X.

我有以下内容,但我想知道如何将日期变量传递给mongo查询。它甚至可能吗?还有另一条通往罗马的路吗?

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

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

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

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

2 个答案:

答案 0 :(得分:1)

我解决了我的问题,它解决了(我会说95%)我的情况。我发现我不需要传递参数,尽管我可以使用'" $ variable"'测试时mongo查询内部(请参阅传递变量以获取更多信息)。

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

db.Scheme.update({" FutureDate":{$ gte:new Date()}},{$ set :{" X":值}},{多:真});

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

脚本中的完整查询

!/ bin / sh的

mongo databaseurl:port / database -u username -p password --eval' db.Scheme.update({" FutureDate":{$ gte:new Date()}},{ $集 :{" X":值}},{多:真});'

传递变量(示例):

!/ bin / sh的

值="实施例"

mongo databaseurl:port / database -u username -p password --eval' db.Scheme.update({" FutureDate":{$ gte:new Date()}},{ $集 :{" X":'" $值"'}},{多:真});'

希望它也可以帮助别人!感谢user000001的帮助:)

答案 1 :(得分:0)

尝试关注

#!/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});"