find_one () находит дубликаты, которых там нет - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь скопировать удаленный сервер атласа mongodb на локальный. Я делаю это с помощью скрипта Python, который также проверяет, есть ли запись уже там. Я вижу, что хотя локальная база данных пуста, мой скрипт находит дубликаты, которых нет в удаленном атласе mongodb (по крайней мере, я не могу их найти). Я не так опытен с mongodb и pymongo, но я не понимаю, что я делаю неправильно. Иногда Find_one () находит точно такую ​​же запись, как и раньше (все поля одинаковы, даже _id)?

Я полностью удалил коллекцию с локального сервера и повторил попытку, но результат все тот же.

UserscollectionRemote = dbRemote['users']
UserscollectionNew = dbNew['users']

LogcollectionRemote = dbRemote['events']
LogcollectionNew = dbNew['events']

UsersOrg = UserscollectionRemote.find()

for document in UsersOrg:   # loop over all users

   print(document)

   if UserscollectionNew.find_one({'owner_id': document["owner_id"]}) is None:  # check if already there
        UserscollectionNew.insert_one(document)

   UserlogsOrg = LogcollectionRemote.find({'owner_id': document["owner_id"]})  # get all logs from this user

   for doc in UserlogsOrg:
         try:
             if LogcollectionNew.find_one({'date': doc["date"]}) is None: # there was no entry yet with this date
                 LogcollectionNew.insert_one(doc)
             else:
                 print("duplicate");
                 print (doc);
         except:
             print("an error occured finding the document");
             print(doc);

1 Ответ

0 голосов
/ 08 октября 2019

У вас есть второй цикл for внутри первого;это может быть проблемой.

В отдельном примечании вы должны изучить mongodump и mongorestore для копирования коллекций;если вам не нужно делать это в коде, эти инструменты лучше подходят для вашего варианта использования.

...