Как найти имена всех коллекций с помощью PyMongo и найти все поля в выбранной коллекции? У меня есть имя базы данных и имя выбранной коллекции. (Сценарий: имя пользователя ввода базы данных, необходимо найти все коллекции и показать в раскрывающемся списке, когда пользователь нажмет на один элемент, нужно найти все поля в этой коллекции)Как найти имена всех коллекций с помощью PyMongo?
ответ
Для поиска коллекций, вы можете использовать collection_names()
- http://api.mongodb.org/python/current/api/pymongo/database.html#pymongo.database.Database.collection_names
Вот сценарий, который я создал, который делает то, что вы хотите.
Он отображает список всех коллекций в базе данных (в этом случае база данных «dh»). Пользователь вводит коллекцию выбора, а сценарий отображает поля и поля в документах на 2 уровня. Он отображается в формате ввода mongo, который может быть скопирован непосредственно в запрос mongo. Он также проверяет поля первого уровня для списков словарей и отображает эти подполя в списках, окруженных полем скобок. [Subfield_in_list] '.
Существует также опция командной строки ввода имени коллекции (например, питон путь/к/скрипт/scriptname.py collection_name
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)
Я уверен, что вы могли бы написать функцию для перебора вниз уровней бесконечно до тех пор, не осталось данных, но это было быстро и грязно, и теперь я нахожу свои потребности. Вы также можете изменить поля только для определенного набора записей в коллекции. Надеюсь, вы сочтете это полезным.
Это очень простой например
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)
результат -> { "Database1": [ "collection1", "collection2" ...], "database2": [...], ...}, как:
{"test": ["score", "test4", "test5", "test6", "test3", "test7", "user", "test2", "test8"],
"testdb": ["test5", "test8", "test2", "test9", "test3", "test4", "test6", "test"],
"local": ["startup_log"],
"stackoverflow": ["questions"]}
Я всегда использовал этот способ, чтобы получить все имена коллекций из моей базы данных 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. Найти имена коллекций в монго
- 2. Извлечение всех документов всех коллекций из базы данных в MongoDB с помощью PyMongo
- 3. Объединение чтения или кэширования коллекций с помощью Pymongo
- 4. Как использовать pymongo для обработки огромных коллекций
- 5. Как получить все имена коллекций в MongoDb с помощью C++
- 6. pymongo + MongoDB: Как найти _id в pymongo?
- 7. найти имена всех классов с их имен
- 8. Как реализовать иерархию категорий с помощью коллекций
- 9. не может получить имена коллекций с помощью мангуста
- 10. Динамические имена коллекций MongoDB с Grails
- 11. Как создать резервную копию и восстановить MongoDB с помощью pymongo?
- 12. Найти подстроки в PyMongo
- 13. PyMongo найти и изменить
- 14. Имена списков в MongoDB с помощью Monk
- 15. MongoDB PyMongo Список всех ключей в документе
- 16. найти документы, которые mongodb перемещается с помощью pymongo
- 17. Как переименовать базу данных mongodb с помощью pymongo?
- 18. Как получить имена всех отмеченных флажков с помощью jQuery?
- 19. Найти имена всех таблиц с более чем х строк
- 20. Удаление всех нулей из коллекций
- 21. Создайте карту с помощью PyMongo
- 22. как запросить с помощью ISODate в PyMongo
- 23. Как удалить записи с помощью PyMongo
- 24. Как вставить несколько курсоров с помощью Pymongo?
- 25. Как вручную создать DBRef с помощью pymongo?
- 26. Найти имена всех классов, загружаемых программой Java, с использованием отражения
- 27. Как найти имена всех таблиц, созданных в последнем SQL-выражении с помощью PHP?
- 28. Найти пересечение коллекций с различными объектами
- 29. Как я могу найти имена всех доступных команд/инструментов GIMP.
- 30. Найти соответствие начало в PyMongo
Как mongo не имеет схемы, как бы вы нашли список полей? – Dogbert