Come trovare i nomi di tutte le raccolte usando PyMongo e trovare tutti i campi nella collezione scelta? Ho il nome del database e il nome della collezione scelta. (Scenario: nome di input dell'utente del database, è necessario trovare tutte le raccolte e mostrare nell'elenco a discesa, quando l'utente fa clic su un elemento deve trovare tutti i campi in quella raccolta)Come trovare i nomi di tutte le raccolte usando PyMongo?
risposta
Per trovare le raccolte, è possibile utilizzare collection_names()
- http://api.mongodb.org/python/current/api/pymongo/database.html#pymongo.database.Database.collection_names
Ecco uno script che ho creato che fa essenzialmente ciò che vuoi.
Visualizza un elenco di tutte le raccolte nel database (in questo caso il database 'dh'). L'utente digita la raccolta di scelta e lo script visualizza i campi e i campi all'interno dei documenti su 2 livelli. Viene visualizzato in formato di presentazione mongo, che può essere copiato direttamente in una query mongo. Controllerà anche i campi di primo livello per gli elenchi di dizionari e visualizzerà quei sottocampi in elenchi circondati dal campo di parentesi. [Sottocampo_in_elenco] '.
C'è anche facoltativa riga di comando di ingresso del nome della raccolta (ad es percorso python/a/script/nome_raccolta 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)
Sono sicuro che si potrebbe scrivere una funzione per scorrere verso il basso i livelli all'infinito finché non ci non sono rimasti dati, ma questo è stato veloce e sporco e serve i miei bisogni per ora.Potresti anche modificare per mostrare i campi solo per un particolare set di record in una collezione.Ti auguro che lo trovi utile
Questo è molto semplice ad es.
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)
risultato -> { "Database1": [ "collection1", "Collection2" ...], "database2": [...], ...}, come:
{"test": ["score", "test4", "test5", "test6", "test3", "test7", "user", "test2", "test8"],
"testdb": ["test5", "test8", "test2", "test9", "test3", "test4", "test6", "test"],
"local": ["startup_log"],
"stackoverflow": ["questions"]}
Ho sempre usato questo modo per ottenere tutti i nomi delle collezioni dal mio database 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. I nomi di tutte le città
- 2. Come eliminare tutte le raccolte e i documenti in ArangoDb
- 3. Come trovare i nomi duplicati usando i panda?
- 4. Come eliminare tutte le raccolte tramite mongodb e node.js?
- 5. Come unire le raccolte MongoDB in Python?
- 6. Trovare tutte le finestre sul desktop usando UIAutomation .NET
- 7. Passa attraverso tutte le raccolte Mongo ed esegui la query
- 8. Seleziona valori distinti in tutte le raccolte nidificate usando LINQ agli oggetti?
- 9. Elenca tutte le sottoclassi con nomi completi
- 10. Trovare nomi appropriati usando NLTK WordNet
- 11. Come trovare tutte le classi che implementano una determinata interfaccia?
- 12. Somma tutte le colonne con una ricerca di nomi con caratteri jolly usando Python Pandas
- 13. Come lavorare con le raccolte
- 14. MongoDB: rimozione di tutte le raccolte il cui nome corrisponde a una stringa
- 15. Come trovare tutte le occorrenze di una variabile in Vim?
- 16. Come trovare tutte le revisioni per un'entità utilizzando i dati di inversione di primavera?
- 17. Trovare tutte le classi con un particolare attributo
- 18. SQL Server: come trovare tutti i nomi di istanza localdb
- 19. Come registrare tutte le chiamate API usando Guzzle 6
- 20. Si applica come su tutte le colonne senza specificare tutti i nomi di colonna?
- 21. Come trovare tutte le sottostringhe possibili in una stringa?
- 22. Come ottenere tutte le classi con Javassist usando un pattern
- 23. Proiezioni NHibernate - come proiettare le raccolte
- 24. pymongo: eliminare i record elegantemente
- 25. Come ottenere ActionDescriptor usando i nomi di azioni e controller
- 26. Come ottenere l'elenco di tutte le raccolte in un documento DocumentDB?
- 27. trovare tutte le serie all'interno di un array
- 28. Trovare tutte le sottostringhe comuni di due stringhe date
- 29. Scorri l'albero di ricerca binario per trovare tutte le foglie
- 30. Come convalidare le raccolte in Maps
Come mongo è senza schema, come si trova l'elenco dei campi? – Dogbert