¿Cómo encontrar nombres de todas las colecciones usando PyMongo y encontrar todos los campos en la colección elegida? Tengo el nombre de la base de datos y el nombre de la colección elegida. (Escenario: nombre de entrada de usuario de base de datos, necesidad de buscar todas las colecciones y mostrar en lista desplegable, cuando el usuario hace clic en un elemento necesita encontrar todos los campos en esa colección)¿Cómo encontrar nombres de todas las colecciones usando PyMongo?
Respuesta
Para encontrar las colecciones, puede usar collection_names()
- http://api.mongodb.org/python/current/api/pymongo/database.html#pymongo.database.Database.collection_names
Aquí hay un script que he creado que básicamente hace lo que quiere.
Muestra una lista de todas las colecciones en la base de datos (en este caso, la base de datos 'dh'). El usuario escribe la colección elegida y la secuencia de comandos muestra los campos y campos dentro de los documentos en 2 niveles. Se muestra en formato de entrada mongo, que se puede copiar directamente en una consulta mongo. También verificará los campos del primer nivel para las listas de diccionarios y mostrará esos subcampos en listas rodeadas por el campo de paréntesis. [Subfield_in_list] '.
También hay entrada de línea de comandos opcional del nombre de la colección (por ejemplo pitón ruta/a/script/COLLECTION_NAME scriptname.py
import pymongo
from pymongo import Connection
mon_con = Connection('localhost', 27017)
mon_db = mon_con.dh
cols = mon_db.collection_names()
for c in cols:
print c
col = raw_input('Input a collection from the list above to show its field names: ')
collection = mon_db[col].find()
keylist = []
for item in collection:
for key in item.keys():
if key not in keylist:
keylist.append(key)
if isinstance(item[key], dict):
for subkey in item[key]:
subkey_annotated = key + "." + subkey
if subkey_annotated not in keylist:
keylist.append(subkey_annotated)
if isinstance(item[key][subkey], dict):
for subkey2 in item[subkey]:
subkey2_annotated = subkey_annotated + "." + subkey2
if subkey2_annotated not in keylist:
keylist.append(subkey2_annotated)
if isinstance(item[key], list):
for l in item[key]:
if isinstance(l, dict):
for lkey in l.keys():
lkey_annotated = key + ".[" + lkey + "]"
if lkey_annotated not in keylist:
keylist.append(lkey_annotated)
keylist.sort()
for key in keylist:
keycnt = mon_db[col].find({key:{'$exists':1}}).count()
print "%-5d\t%s" % (keycnt, key)
Estoy seguro de que podría escribir una función para recorrer hacia abajo hasta que los niveles infinitamente no quedan datos, pero esto fue rápido y sucio y sirve para mis necesidades por ahora. También podría modificar para mostrar los campos solo para un conjunto particular de registros en una colección. Espero que lo encuentre útil.
Esto es muy simple. por ej.
import pymongo
import json
if __name__ == '__main__':
client = pymongo.MongoClient("localhost", 27017, maxPoolSize=50)
d = dict((db, [collection for collection in client[db].collection_names()])
for db in client.database_names())
print json.dumps(d)
resultado -> { "database1": [ "collection1", "collection2" ...], "database2": [...], ...}, como:
{"test": ["score", "test4", "test5", "test6", "test3", "test7", "user", "test2", "test8"],
"testdb": ["test5", "test8", "test2", "test9", "test3", "test4", "test6", "test"],
"local": ["startup_log"],
"stackoverflow": ["questions"]}
Siempre uso esta forma para obtener todos los nombres de colecciones de mi base de datos MongoDB.
import pymongo
db_connect = pymongo.MongoClient('192.168.4.202', 20020)
database_name = 'MY_DATABASE_NAME'
database = db_connect[database_name]
collection = database.collection_names(include_system_collections=False)
for collect in collection:
print collect
- 1. Encontrar todas las ventanas en el escritorio usando UIAutomation .NET
- 2. Cómo desmarcar todas las filas usando UITableViewCellAccessoryCheckmark
- 3. exportando MongoDB a CSV usando pymongo
- 4. ¿Alguna vez Microsoft hará todas las colecciones utilizables por LINQ?
- 5. ¿Cómo unirse a las colecciones de MongoDB en Python?
- 6. Usando $ o cláusula en pymongo
- 7. ¿Cómo encontrar todas las clases que implementan una interfaz determinada?
- 8. Listar todas las subclases con nombres completos
- 9. Comando volver a indexar todas las colecciones mongodb
- 10. Cómo suprimir todas las advertencias usando MSBuild
- 11. pymongo find() vs hallazgo mongodb(), pymongo encontrar() da menos datos sobre el documento
- 12. ¿Cómo encontrar todas las apariciones de una variable en Vim?
- 13. ¿Cómo encontrar todas las casillas de verificación no seleccionadas?
- 14. ¿Cómo encontrar todas las identificaciones de niños recursivamente?
- 15. ¿Cómo encontrar todas las subcadenas posibles en una cadena?
- 16. cómo emitir un "show dbs" de pymongo
- 17. ¿Dónde encontrar todas las opciones para module.config.php?
- 18. Encontrar todas las referencias en Eclipse
- 19. Encontrar todas las clases con un atributo en particular
- 20. ¿Cómo puedo encontrar todas las unidades en mi aplicación Delphi?
- 21. Cómo encontrar todas las bibliotecas integradas en Python
- 22. ¿Cómo encontrar todas las clases que implementan IDisposable?
- 23. reemplazar nombres de todas las directiories y archivos en PS
- 24. ¿Cómo encontrar todas las palabras que aparecen entre paréntesis?
- 25. ¿Cómo encontrar todas las rutas vertex-disjoint en un gráfico?
- 26. Encontrar todas las combinaciones de valores de matriz de JavaScript
- 27. Proyecciones NHibernate: cómo proyectar las colecciones
- 28. usando Interop.SHDocVw.dll ¿Dónde puedo encontrar este espacio de nombres/dll?
- 29. MongoDB: Eliminar todas las colecciones cuyo nombre coincida con una cadena
- 30. Cómo ver todas las colecciones de sitios en un contenido específico DB
Como mongo es un esquema, ¿cómo encontraría la lista de campos? – Dogbert