2016-04-25 4 views
0

Ich erhalte einen 500-Fehler auf einer getJSON Anforderung, die Karten auf eine Python 2.7 Funktion einen MongoDB update mit $pull enthält.Aktualisierung mit Pull in MongoDB 3.2.5 Matching aber nicht Dokument modifiziert

Letzter Fehler mit sudo tail -f /var/log/apache2/error.log gesehen ist:

[wsgi:error] [pid 1721:tid 140612911712000] 
[client 127.0.0.1:59078] 
KeyError: 'nModified', referer: http://localhost/control_room 

Die Python-Logik, die mit diesem speziellen Schlüssel befasst, ist ein update mit $pull:

update_with_pull = collection.update({"user_email":user_email,"top_level.year":entry_year,"top_level.month":entry_month}, { "$pull": {dynamic_nested_key: {"timestamp":entry_timestamp}}}) 

Die bedingte danach versucht, eine zu fangen, wenn Dokument wurde geändert oder nicht mit:

if update_with_pull['nModified'] == 1: 
    #do stuff 

testete ich die gleiche Operation in der Mongo Shell und es zurückgegeben:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 }) 

So scheint es, um die Abfrage zu werden passend, aber keine Änderungen zu tun.

Um zu beheben, der entry_timestamp Wert, der oben im $pull Abschnitt verwendet wird, in der Datenbank und die Funktion konsistent ist (dh sie beiden Saiten mit den gleichen Zeichen sind).

Einige Ideen:

  • Ich habe gerade die Anwendung von einem 2.6.11 auf eine 3.2.5 MongoDB Umgebung bewegt, die das Problem verursachen kann, aber wenn ja, ich habe zu prüfen, nicht in der Lage gewesen, wie noch.
  • Die Syntax für $pull wurde in 3.2.5 geändert?
  • Es gibt Berechtigungsprobleme in der Sammlung, die eine Änderung verhindern?
  • Ich renne pymongo 2.6.2 in virtualenv - vielleicht hat es einige Inkompatibilitäten mit MongoDB 3.2.5?

Antwort