mongodb: insérer si n'existe pas

Chaque jour, je reçois un stock de documents (une mise à jour). Ce que je veux faire est d'insérer chaque élément qui n'existe pas déjà.

  • J'ai aussi envie de garder une trace de la première fois que j'ai inséré, et la dernière fois que j'ai vu dans une mise à jour.
  • Je ne veux pas avoir de doublons de documents.
  • Je ne veux pas supprimer un document qui a déjà été enregistré, mais n'est pas dans ma mise à jour.
  • 95% (estimation) des enregistrements ne sont pas modifiées au jour le jour.

Je suis en utilisant le pilote Python (pymongo).

Ce que je fais (pseudo-code):

for each document in update:
      existing_document = collection.find_one(document)
      if not existing_document:
           document['insertion_date'] = now
      else:
           document = existing_document
      document['last_update_date'] = now
      my_collection.save(document)

Mon problème est qu'il est très lent (40 minutes pour moins de 100 000 enregistrements, et j'ai des millions d'entre eux dans la mise à jour).
Je suis assez sûr il y a quelque chose builtin pour le faire, mais le document de mise à jour() est mmmhhh.... un peu laconique.... (http://www.mongodb.org/display/DOCS/Updating )

Quelqu'un peut conseiller sur la façon de le faire plus vite?

InformationsquelleAutor LeMiz | 2010-05-10