7
votes

Comment puis-je faire un get_or_create à PymonGo (Python MongoDB)?

Premièrement, trouvez si une requête correspondante de document existe.

Si tel est le cas, mettez à jour ce document avec les nouvelles données.

Sinon, insérez un nouveau document dans la base de données.


2 commentaires

Dupliqué possible de MongoDB: insérer s'il n'existe pas ?


Pas de devoirs mais incapable de lire la documentation de base ....


3 Réponses :


14
votes

Vous pouvez utiliser "UPSert" égal à true. Ensuite, la requête de mise à jour que vous utilisez avec "UPSert", car c'est vrai faire exactement ce que vous voulez.


1 commentaires

Mise à jour ne renvoie qu'un Writeresult . Utilisez FindAndModify à la place.




0
votes

Exemple de test complet. Voir aussi $ setoninsert qui contrairement à $ SET ne modifiera pas l'enregistrement si la clé existe.

payload= {'id':'key123','other':'stuff'}
collection.update({'eventid':payload['id']}, {"$set": payload}, upsert=True)
collection.count_documents({}) # 1

payload= {'id':'key123','other':'stuff2'}
collection.update({'eventid':payload['id']}, {"$set": payload}, upsert=True)
collection.count_documents({}) # 1

payload= {'id':'key456','other':'more stuff'}
collection.update({'eventid':payload['id']}, {"$setOnInsert": payload}, upsert=True)
collection.count_documents({}) # 2

payload= {'id':'key456','other':'more stuff2'}
collection.update({'eventid':payload['id']}, {"$setOnInsert": payload}, upsert=True)
collection.count_documents({})


0 commentaires