从 shell 脚本查询 MongoDB Atlas 的正确方法是什么

问题描述 投票:0回答:1

我一直在尝试编写一个 shell 脚本来使用快照恢复 MongoDB Atlas 实例,然后查询该实例以验证结果。虽然我可以使用 API 调用来获取快照 ID 并执行备份/恢复,没有任何问题,但实际上从脚本查询所述实例一直给我带来问题。似乎没有显式的 API 调用来运行查询,至少我没有发现。我尝试过使用 MongoSH 命令进行查询,如下所示:

collection_list=

mongosh --quiet "mongodb+srv://'${dev_creds}'@sandbox.vk4dz.mongodb.net/" --apiVersion 1 --eval "db.getCollectionNames()"

但是,当我运行此命令时,无论我如何格式化凭据,我都会收到“身份验证失败”错误。我知道凭据有效,因为我能够使用它们登录,并且能够更早地使用它们发起恢复 API 调用。我是否错过了此命令中的某些内容,或者是否有更好的方法进入 MongoDB Atlas?

我尝试以不同的方式格式化命令,并检查以确保我生成的连接字符串看起来合法。我还尝试使用 API get 请求来查询数据,但到目前为止还无法登录。我还尝试了各种查询以确保有问题的查询不是问题的原因,我也尝试在开头不使用变量名来运行命令。

mongodb shell mongodb-query sh mongodb-atlas
1个回答
0
投票

一定是这样的:

dev_creds='domscheit:secretPassword'
mongosh --quiet "mongodb+srv://${dev_creds}@sandbox.vk4dz.mongodb.net/" --eval "db.getCollectionNames()"

--apiVersion
不需要。

确保数据库用户已创建并具有足够的权限,请参阅配置数据库用户

您也可以使用这个:

mongosh --quiet "mongodb+srv://sandbox.vk4dz.mongodb.net/" --eval "db.getSiblingDB('admin').auth('domscheit', 'secretPassword'); db.getCollectionNames()"

注意,对于连接字符串,您使用默认数据库“test”。您可以使用

db.getSiblingDB('...')
指定数据库,也可以将其包含在连接字符串中。但是,您还需要指定身份验证数据库:

mongosh --quiet "mongodb+srv://${dev_creds}@sandbox.vk4dz.mongodb.net/myDb?authSource=admin"
© www.soinside.com 2019 - 2024. All rights reserved.