usando tutorial nodejs node example español cómo crear node.js mongodb node-mongodb-native

node.js - nodejs - node js mongodb tutorial español



¿Cómo comprobar si existe una colección en el controlador de nodejs nativo de Mongodb? (6)

Ahora hay un método listCollections en el controlador nativo Node.js. Devuelve información sobre todas las colecciones en la base de datos actual. Puedes usarlo para verificar si una colección determinada está ahí:

collectionExists = function(name, cb) { mongoDb.listCollections().toArray(function(err, collections) { if (err) return cb(err); cb(null, collections.some(function(coll) { return coll.name == name; })); }); }

Necesito verificar si existe una colección en una determinada base de datos y crearla si no existe. Yo sé eso

db.createCollection(collName, {strict:true}, function(error, collection))

comprueba la existencia de la colección collName antes de crearlo y establece el objeto de error . Pero necesito una función independiente para comprobar eso.


Al usar el controlador mongo-native y Node.js 7.6+, uso lo siguiente:

const collections = await db.collections(); if (!collections.map(c => c.s.name).includes(collName)) { await db.createCollection(collName); }


Desde MongoDB 3.0 puedes simplemente ejecutar:

db.getCollectionNames()

que devuelve una matriz con los nombres de todas las colecciones en la base de datos actual:

[ "employees", "products", "mylogs"]

verifique la documentación de Mongo DB , o también podría usar db.getCollectionInfos () si necesita más información sobre cada colección


El método collectionNames del objeto Db del controlador nativo acepta un filtro de nombre de colección opcional como primer parámetro para permitirle verificar la existencia de una colección:

db.collectionNames(collName, function(err, names) { console.log(''Exists: '', names.length > 0); });

En la versión 2.x del controlador nativo de MongoDB, collectionNames ha sido reemplazado por listCollections que acepta un filtro y devuelve un cursor para que haga esto como:

db.listCollections({name: collName}) .next(function(err, collinfo) { if (collinfo) { // The collection exists } });


La pregunta se refiere al controlador nativo, pero llegué aquí buscando cómo hacer esto en pymongo . Por pymongo general, la API de pymongo es idéntica a la API de JS, pero en este caso, collection_names no tiene un argumento para el nombre de la colección (como en la answer JohnnyHK ), sino que el primer argumento es un booleano (ya sea para incluir colecciones del sistema ). Dado que una cadena se evalúa como True , esto puede ser confuso. Así que espero que esto ayude a los futuros lectores:

import pymongo cl = pymongo.MongoClient() db = cl[''my-db''] if ''my-col'' in db.collection_names(False): ...


En MongoDB 3.0 y versiones posteriores, debe ejecutar un comando para enumerar todas las colecciones en una base de datos:

use test; db.runCommand( { listCollections: 1 } );

Aunque la consulta de system.namespaces seguirá funcionando cuando use el motor de almacenamiento predeterminado (MMAPv1), no se garantiza que funcione para otros motores, como WiredTiger.

Antes de MongoDB 3.0 debes hacer lo siguiente:

Puedes consultar la colección system.namespaces :

use test; db.system.namespace.find( { name: ''test.'' + collName } );

Como en:

db.system.namespaces.find( { name: ''test.testCollection'' } );

Que devuelve:

{ "name" : "test.testCollection", "options" : { "flags" : 1 } }

O por supuesto, nada.

Véase también: https://github.com/mongodb/specifications/blob/master/source/enumerate-collections.rst