Интерпретировать «коллекцию» в db.collection.drop() как переменную или заданную базу данных

avatar
Pendelluft
8 апреля 2018 в 03:07
44
1
1

Я пытаюсь перебрать список коллекций в базе данных MongoDB 3.4 и выполнить обновления и удаления. Я пытаюсь заставить код интерпретировать «коллекцию» как строковую переменную, но код считает, что это одна база данных:

for collection in db.collection_names():
    if collection[-3:] == "_CS":
        request = [UpdateMany({},{"$set": {"Collection": collection}})]
        result = db.collection.bulk_write(request)

    else:
        db.collection.drop() 

Есть ли альтернативный способ удаления коллекции через Python/Pymongo, который принимает имя коллекции в качестве аргумента, или есть способ разобрать «коллекцию», чтобы интерпретатор понял, что это переменная?

Источник

Ответы (1)

avatar
Oluwafemi Sule
10 апреля 2018 в 04:09
1

В блоке цикла имя collection связано с объектом str.

Индексация в стиле словаря полезна здесь для доступа к коллекции с именем collection. например,

for collection in db.collection_names():
    if collection[-3:] == "_CS":
        request = [UpdateMany({},{"$set": {"Collection": collection}})]
        result = db[collection].bulk_write(request)

    else:
        db[collection].drop()

Или используйте метод get_collection экземпляра pymongo.database.Database.

for collection in db.collection_names():
    if collection[-3:] == "_CS":
        request = [UpdateMany({},{"$set": {"Collection": collection}})]
        result = db.get_collection(collection).bulk_write(request)

    else:
        db.get_collection(collection).drop()