2015-10-05 81 views
1

我不知道這是否甚至可能,我可以看到在mongo eval查詢中使用bash參數可能存在問題。我想要做的是更新mongo中的文件,其中日期大於今天的日期。通過shell腳本通過參數執行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

shell變量不會在單引號中被擴展。嘗試把變量放在雙引號裏面,比如'command'previous'「$ var」'next「' – user000001

+0

Thanks @ user000001!作爲一個魅力,hm,不知道爲什麼我沒有嘗試過,想法如何我可以$今天是一個真正的日期值?而不是字符串? 贊同javascript, var from = ISODate(「2011-11-24」) 任何想法,我怎麼可以在shell/bash中做同樣的事情? – gudbrand3

+0

我不認爲你可以從bash中做到這一點。你可能不得不從mongo做到,但我不知道如何... – user000001

回答

1

我來解決我的問題,它解決了我的情況(我會說95%)。我發現我不需要傳遞一個參數,儘管我可以在測試時使用mongo查詢中的''$ variable''來完成它(請參閱傳遞變量以獲取更多信息)。

我查詢的解決方案是低於(不包括傳遞變量):

db.Scheme.update({ 「FutureDate」:{$ GTE:新的Date()}},{$設置 : { 「X」:值}},{多:真});

{multi:true}允許Scheme中的所有文檔循環。

腳本完整查詢

/bin/sh的

蒙戈databaseurl:端口/數據庫-u用戶名-p密碼--eval「db.Scheme.update({ 「FutureDate」: {$ gte:new Date()}},{$ set :{「X」:Value}},{multi:true});'

要傳遞變量(示例):

/bin/sh的

值= 「實施例」

蒙戈databaseurl:端口/數據庫-u用戶名-p密碼--eval 'db.Scheme.update({「FutureDate」:{$ gte:new Date()}},{$ set :{「X」:'「$ Value」'}},{multi:true});''

希望它可以幫助別人!感謝user000001尋求幫助:)