我不知道这是否可行,我可以看到在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) 切换$,但无法执行查询。
非常感谢帮助或建设性的反馈,谢谢! :)
答案 0 :(得分:1)
我解决了我的问题,它解决了(我会说95%)我的情况。我发现我不需要传递参数,尽管我可以使用'" $ variable"'测试时mongo查询内部(请参阅传递变量以获取更多信息)。
我的查询解决方案在之下(不包括传递变量):
db.Scheme.update({" FutureDate":{$ gte:new Date()}},{$ set :{" X":值}},{多:真});
{multi:true}允许循环中的所有文档。
脚本中的完整查询
mongo databaseurl:port / database -u username -p password --eval' db.Scheme.update({" FutureDate":{$ gte:new Date()}},{ $集 :{" X":值}},{多:真});'
传递变量(示例):
值="实施例"
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});"