我正在尝试从 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 脚本可行吗?
最佳答案
假设您的所有 ID 都在一个名为 id.txt
的文件中,由新行分隔:
- 构建要包含在查找请求中的
$in
中的 id 列表 (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
关于bash - 从 bash 脚本运行 mongo 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44593374/