我已经建立了一个MongoDB数据库,有admin个用户,只有管理权限,没有对数据库的读写访问权限.

我现在想做的是:

  • 添加一个新数据库,
  • 并向该数据库添加一个新用户.

而且:我需要从命令行执行此操作.所以我试着:

$ mongo admin -u admin -p admin --eval "db.addUser('dummyuser', 'dummysecret')"

(请注意,由于我仍在运行MongoDB 2.0,所以我使用的是旧格式db.addUser.)

如果我也能告诉它这个用户应该用于哪个数据库,这将是非常有意义的.但现在我在挣扎.如何为此命令指定数据库?如果我在交互式shell中,我可以直接运行

> use dummydb

但是如何从命令行执行此操作?我的第一次try 是将两个命令连接到一个;,但这不起作用:

$ mongo admin -u admin -p admin --eval "use dummydb;db.addUser('dummyuser', 'dummysecret')"

只是给了我语法错误.

我该怎么做?

推荐答案

use db语法仅在交互式shell会话中受支持.

如果想从管理脚本更改数据库,可以使用db.getSiblingDB('dbname').

因此,使用--eval的等效命令行是:

# MongoDB 2.6+: use createUser()
$ mongo admin -u admin -p admin --eval "db.getSiblingDB('dummydb').createUser({user: 'dummyuser', pwd: 'dummysecret', roles: ['readWrite']})"

# MongoDB 2.4: use addUser()
$ mongo admin -u admin -p admin --eval "db.getSiblingDB('dummydb').addUser('dummyuser', 'dummysecret')"

MongoDB手册中有一节涵盖了Differences between interactive and scripted mongo个方面.这包括其他交互式shell助手(如show dbsshow collections)的类似功能.

Mongodb相关问答推荐

如何在MongoDB中查找和过滤嵌套数组

MongoDB - 将属性添加到数组中的对象(如果不存在)

如何使用内部数组中的值更新文档

如何在 kubernetes 中获取分片 mongodb 的备份

mongodb.将文档分组在数组中,对它们进行评分计数和求和并添加新字段

仅当特定字段存在于 MongoDB 中时才更新它

Mongodb 按数组元素聚合组

Mongo:查找具有 0 个关联文档的文档,成本更低

管道聚合mongodb同一$project阶段的计算字段?

通过 docker 运行的 MongoDB 服务器无法互相看到(名称解析中的临时故障)

MongoDB 更新:如果新值不同,则将旧字段值推送到另一个数组字段

使用 mongodb 时是否需要规范化数据库?

mongoose中的 required是什么意思?

如何使用python将csv数据推送到mongodb

如何使用sailsjs v0.10连接mongodb?

从命令行创建 MongoDB 用户

如何在 mongodb 本机驱动程序中对 find() 进行字段 Select ?

如何在 MongoDB Map-reduce 映射函数中使用变量

如何将转储文件夹导入 mongodb 数据库?

如何使用 mongoose 连接到 mongoDB Atlas