📅  最后修改于: 2023-12-03 15:41:26.821000             🧑  作者: Mango
在MongoDB中,我们可以使用查询语句来获取我们想要的数据。每次查询通常返回一些记录,但这些记录可能具有我们不想看到的多余字段。因此,我们需要一种方法来提取我们需要的字段,并忽略那些不需要的字段。
在本教程中,我们将学习如何使用Shell-Bash脚本从MongoDB查询结果中获取自定义字段。
在Bash脚本中运行MongoDB查询,我们需要使用mongo命令并传递要查询的参数。以下是一个示例查询,以从一个名为myCollection的集合中获取所有记录,并仅提取name和email字段:
mongo myDatabase --eval 'db.myCollection.find({}, {name:1, email:1, _id:0})'
在上面的命令中,我们使用--eval标志将查询指定为字符串,并将其传递给mongo命令。查询使用db.myCollection.find()方法来选择myCollection集合中所有文档,并使用第二个参数指定要提取的字段列表。
在这种情况下,{name:1, email:1, _id:0}告诉查询仅返回'name'和'email'字段,并将忽略默认的'_id'字段。在MongoDB查询中,如果要提取特定字段,请将该字段名称作为键提供给第二个参数,并将其设置为1。如果您不想提取特定的字段,则将其设置为0。
MongoDB查询结果作为JSON格式返回。因此,在Bash脚本中,我们可以轻松地将其加载到变量中,以便在脚本中进一步处理。以下是一个示例脚本,演示如何使用jq命令从MongoDB查询结果中提取特定的字段:
#!/bin/bash
query='db.myCollection.find({}, {name:1, email:1, _id:0})'
result=$(mongo myDatabase --eval "$query" --quiet)
echo $result | jq -c '.[] | {name: .name, email: .email}'
在上面的脚本中,我们使用了两个Bash命令:mongo和jq。mongo命令使用与前面相同的查询,但添加了--quiet标志以使mongo不输出其他日志消息。
然后,我们将结果存储在$result变量中,并使用jq命令从结果中提取我们想要的字段。在这种情况下,我们将jq命令转换为数组,然后使用对象过滤器将每个文档转换为具有我们需要的字段的对象。
在Bash脚本中获取MongoDB查询结果中的自定义字段非常容易。只需使用MongoDB查询语句并指定要提取的字段即可。然后可以将查询结果转换为JSON格式,然后在脚本中进一步处理。使用jq等工具可轻松提取所需字段。