2017-06-16 110 views
2

我想從bash腳本運行以下命令蒙戈命令

db['STUDENT_DOCUMENTS.chunks'].find({ 
    _id: { 
     $in: [ 
      ObjectId("57ce3bc6e4b0ee0234924cb4"), 
      ObjectId("57a40750e4b03808d591b5cb"), 
      ObjectId("57b17588e4b03808d594ceec"), 
      ObjectId("57b2e03ee4b03808d595246f"), 
      ObjectId("57c786bde4b03808d598eb41") 
     ] 
    } 
}) 

ObjectId是一個分隔的文件總數超過100+,我需要 登錄與用戶名的MongoDB和密碼並將結果輸出到一個文件中 這可以在bash shell腳本中如何實現?

我喜歡這個

for i in 'cat ObjectId.txt" ; do \ 
mongo 127.0.0.1:10000/admin --username=user --password=pass \ 
--eval "db['Student_DOCUMENTS.chunks'].find({_id :{$in: [ObjectId("$i") 
]}}) 

運行此腳本的輸出重定向到一個文件 時想的一些事情是這樣的可行與bash腳本?

回答

0

假設你有一個名爲id.txt文件所有的IDS通過新行分隔:

  • 建立ID列表包含在$in在你的搜索請求(ObjectId('...'),...
  • 使用--quiet爲了不包括MongoDB的連接登錄
  • 重定向輸出與> your_file.json

Bash腳本:

file=id.txt 
id_list= 

while IFS= read -r id || [[ -n "$id" ]]; 
do 
    if [ ! -z "$id_list" ]; then 
     id_list="$id_list, ObjectId(\"$id\")" 
    else 
     id_list="ObjectId(\"$id\")" 
    fi 
done <"$file" 

request="db['Student_DOCUMENTS.chunks'].find({_id :{\$in: ["$id_list"]}})" 

mongo 127.0.0.1:10000/admin --username=user --password=pass \ 
    --quiet --eval "$request" > request.json