Получить значения из поля в документе в Mongo и удалить? - PullRequest
0 голосов
/ 07 февраля 2019

Я хочу обновить коллекцию Mongo db строками из файла CSV, и я получаю ошибку, касающуюся моего использования distinct.Я пытаюсь удалить документ, если его идентификатор найден в файле CSV.Вот код:

# Read in CSV file
df = pd.read_csv(csv_path)
# Create list of ID values in CSV
pdToList = list(df['id'])
# Get ids from CSV
for counter, value in enumerate(pdToList):
    # find distinct ids in collection
    result = db[coll_name].distinct("id")
    # Loop through IDs in collection
    for id_val in result:
         # Check if ID in collection equals ID in CSV
         if id_val == value:
             # Delete document if it exists in CSV                         
             db[coll_name].delete_one({'id':id_val})
         else:
             pass

Этот сценарий работает нормально для примерно 100 таблиц, но затем я получаю сообщение об ошибке, если он слишком большой: {'ok': 0.0, 'errmsg': 'distinct too big, 16mb cap', 'code': 17217, 'codeName': 'Location17217'}.Знаете ли вы, как я могу получить значение поля из документа без этой ошибки в 16 МБ?Я читал похожие вопросы, но не нашел решения.

1 Ответ

0 голосов
/ 08 февраля 2019

Вот что я сделал.Было бы лучше find значений, которые были бы равны значениям в списке данных, чем пытаться сделать другой цикл for, вероятно, лучше для моего компьютера.

# Read in CSV file
df = pd.read_csv(csv_path)
# Create list of ID values in CSV
pdToList = list(df['id'])
# Get ids from CSV
for counter, value in enumerate(pdToList):
    # check if value is in document
    if db[coll_name].find({},{"id":{"$eq": value}}):

        # Delete document if it exists in CSV
        db[coll_name].delete_many({'id':value})

    else:
        pass
...