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] [--port ] [--host
] [--eval ] [-u ] [--username ]
[-p ] [--password ] [--help] [-h] [--version]
[--verbose] [--ipv6] [database] [file.js]
Es posible acceder a la ayuda mediante la opción --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 expected
Para 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!