Supongamos que hemos instalado MongoDB desde paquete en Debian/Devuan y derivados (ejecutando por ejemplo
MongoDB es un sistema de gestión de bases de datos orientado a documentos libre y open source. Está clasificado como motor NoSQL y utiliza un formato estilo JSON para los documentos.
Luego de instalar MongoDB en un sistema Debian/Devuan o derivado, éste escucha por defecto en el puerto TCP 27017 y a su vez localmente en un socket Unix:
El paquete "mongodb" provee el cliente de línea de comandos
De acuerdo a la página de manual de
El comando
Cabe destacar que no es posible crear usuarios en la base de datos "local".
De acuerdo al manual de MongoDB, la función
Los roles preexistentes (built-in) son "read", "readWrite", "dbAdmin", "dbOwner", "userAdmin", entre otros. Consultar el manual de MongoDB para más información acerca de built-in roles.
Para crear un usuario entonces, es necesario invocar al método
Como método de comprobación (más allá de la salida retornada por el método) es posible consultar los usuarios existentes en la base de datos actual, utilizando el comando
apt-get install mongodb
)
y necesitamos crear un usuario y base de datos para una aplicación.
Este artículo explica cómo hacerlo en simples pasos desde línea de
comandos.MongoDB es un sistema de gestión de bases de datos orientado a documentos libre y open source. Está clasificado como motor NoSQL y utiliza un formato estilo JSON para los documentos.
Luego de instalar MongoDB en un sistema Debian/Devuan o derivado, éste escucha por defecto en el puerto TCP 27017 y a su vez localmente en un socket Unix:
root@devuan:~# netstat -tuxlp | grep mongo tcp 0 0 localhost:27017 0.0.0.0:* LISTEN
11088/mongod unix 2 [ ACC ] STREAM LISTENING 23198 11088/mongod
/tmp/mongodb-27017.sock
Esta es la comprobación mínima para saber si MongoDB está funcionando. Digamos que hemos instalado MongoDB pero no sabemos que hacer. Seguramente alguna aplicación necesitará conectarse al servidor y comenzar a insertar documentos.
El paquete "mongodb" provee el cliente de línea de comandos
mongo
, el cual permite gestionar el motor desde una shell en Linux. Similar al caso de los clientes mysql
para MySQL y psql
para PostgreSQL.De acuerdo a la página de manual de
mongo
, se trata de una shell
interactiva basada en JavaScript que hace de interfaz a MongoDB. Sirve
tanto para tareas administrativas como para testear consultas y
operaciones directamente sobre una base de datos:MONGO(1) mongodb-manual MONGO(1) NAME mongo - MongoDB Shell DESCRIPTION mongo is an interactive JavaScript shell interface to MongoDB, which provides a powerful interface for systems administrators as well as a way for developers to test queries and operations directly with the database. mongo also provides a fully functional JavaScript environ‐ ment for use with a MongoDB. This document addresses the basic invoca‐ tion of the mongo shell and an overview of its usage. SYNOPSIS mongo [--shell] [--nodb] [--norc] [--quiet] [--portEs posible acceder a la ayuda mediante la opción] [--host ] [--eval ] [-u ] [--username ] [-p ] [--password ] [--help] [-h] [--version] [--verbose] [--ipv6] [database] [file.js]
--help
:root@devuan:~# mongo --help | head MongoDB shell version: 3.2.11 usage: mongo [options] [db address] [file names (ending in .js)] db address can be: foo foo database on local machine 192.169.0.5/foo foo database on 192.168.0.5 machine 192.169.0.5:9999/foo foo database on 192.168.0.5 machine on port 9999 Options: --shell run the shell after executing files --nodb don't connect to mongod on startup - no 'db address' arg expectedPara comenzar a trabajar con la shell, simplemente ejecutar
mongo
:root@devuan:~# mongo MongoDB shell version: 3.2.11 connecting to: test Welcome to the MongoDB shell. For interactive help, type "help". For more comprehensive documentation, see http://docs.mongodb.org/ Questions? Try the support group http://groups.google.com/group/mongodb-user >El subcomando
help
muestra una breve ayuda de comandos y métodos:> help db.help() help on db methods db.mycoll.help() help on collection methods sh.help() sharding helpers rs.help() replica set helpers help admin administrative help help connect connecting to a db help help keys key shortcuts help misc misc things to know help mr mapreduce .
.
.
El comando
show dbs
permite listar las bases de datos existentes:> show dbs local 0.000GB
Crear una base de datos
No existe un comando "create" para crear una base de datos, sino que el comandouse
se utiliza para cambiar la base de datos actual (igual que en MySQL). Si la base de datos no existe, use
la crea automáticamente:> use nutch switched to db nutch > show dbs local 0.000GB
Sin embargo, al listar las bases de datos, se observa que nuestra nueva base de datos no aparece en el listado. Esto se debe a que la base de datos está vacía. Una vez insertado el primer documento, la base de datos aparecerá listada en la salida de
show dbs
.Crear un usuario
El siguiente paso consiste en crear un usuario en nuestra nueva base de datos. Mediantedb.help()
es posible acceder a la ayuda de métodos relacionados a bases de datos:> db.help() DB methods: db.adminCommand(nameOrDocument) - switches to 'admin' db, and runs command [ just calls db.runCommand(...) ] db.auth(username, password) db.cloneDatabase(fromhost) db.commandHelp(name) returns the help for the command db.copyDatabase(fromdb, todb, fromhost) db.createCollection(name, { size : ..., capped : ..., max : ... } ) db.createUser(userDocument) db.currentOp() displays currently executing operations in the db db.dropDatabase() db.eval() - deprecated db.fsyncLock() flush data to disk and lock server for backups db.fsyncUnlock() unlocks server following a db.fsyncLock() db.getCollection(cname) same as db['cname'] or db.cname db.getCollectionInfos([filter]) - returns a list that contains the names and options of the db's collections db.getCollectionNames() db.getLastError() - just returns the err msg string db.getLastErrorObj() - return full status object db.getLogComponents() db.getMongo() get the server connection object db.getMongo().setSlaveOk() allow queries on a replication slave server db.getName() db.getPrevError() db.getProfilingLevel() - deprecated db.getProfilingStatus() - returns if profiling is on and slow threshold db.getReplicationInfo() db.getSiblingDB(name) get the db at the same server as this one db.getWriteConcern() - returns the write concern used for any operations on this db, inherited from server object if set db.hostInfo() get details about the server's host db.isMaster() check replica primary status db.killOp(opid) kills the current operation in the db db.listCommands() lists all the db commands db.loadServerScripts() loads all the scripts in db.system.js db.logout() db.printCollectionStats() db.printReplicationInfo() db.printShardingStatus() db.printSlaveReplicationInfo() db.dropUser(username) db.repairDatabase() db.resetError() db.runCommand(cmdObj) run a database command. if cmdObj is a string, turns it into { cmdObj : 1 } db.serverStatus() db.setLogLevel(level,) db.setProfilingLevel(level, ) 0=off 1=slow 2=all db.setWriteConcern( ) - sets the write concern for writes to the db db.unsetWriteConcern( ) - unsets the write concern for writes to the db db.setVerboseShell(flag) display extra information in shell output db.shutdownServer() db.stats() db.version() current version of the server
El método
db.createUser()
permite crear un usuario en la base de datos actual. Es necesario asegurarse de estar conectado a la base correcta:> db nutch
El comando
db
indica el nombre de la base de datos actual.Cabe destacar que no es posible crear usuarios en la base de datos "local".
De acuerdo al manual de MongoDB, la función
db.createUser()
toma como parámetro un documento de tipo "user". Este documento (como
todos en MongoDB) utiliza un formato estilo JSON que requiere la
presencia de las claves "user", "pwd" y "roles" (arreglo), las cuales
identifican al nombre del usuario, su contraseña y roles
respectivamente. Es posible indicar parámetros adicionales, los cuales
son opcionales.Los roles preexistentes (built-in) son "read", "readWrite", "dbAdmin", "dbOwner", "userAdmin", entre otros. Consultar el manual de MongoDB para más información acerca de built-in roles.
Para crear un usuario entonces, es necesario invocar al método
createUser()
y pasar un documento "user" como parámetro:> db.createUser( ... { ... user: "nutch", ... pwd: "1234", ... roles: ["dbOwner"] ... } ... ) Successfully added user: { "user" : "nutch", "roles" : [ "dbOwner" ] }
La contraseña se especifica de forma plana, pero su almacenamiento varía de acuerdo a la configuración del servidor MongoDB (puede ser SHA-1 o SHA-256).
Como método de comprobación (más allá de la salida retornada por el método) es posible consultar los usuarios existentes en la base de datos actual, utilizando el comando
> show users
:> show users { "_id" : "nutch.nutch", "user" : "nutch", "db" : "nutch", "roles" : [ { "role" : "dbOwner", "db" : "nutch" } ] }
Verificar el funcionamiento
Finalmente resta cerrar la sesión y verificar las nuevas credenciales:> exit bye root@devuan:~#Por ejemplo, conectarse a la nueva base de datos con el usuario recién creado mediante TCP/IP:
root@devuan:~# mongo -u nutch -p 127.0.0.1:27017/nutch MongoDB shell version: 3.2.11 Enter password: connecting to: 127.0.0.1:27017/nutch > db nutch¡Éxito!