MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Aktualizacja mongodb dopasowana do dokumentu nie powiodła się

To nie porażka, ale projekt.

W Interfejs API operacji zbiorczych , jeśli podasz wartość do aktualizacji, która odpowiada istniejącej wartości dokumentu, nie zostanie ona oznaczona jako zmodyfikowana i faktycznie nie podejmie żadnej próby przepisania dokumentu.

Prosty test:

db.junk.insert({ "a": 1 })
WriteResult({ "nInserted" : 1 })

db.junk.update({ "a": 1},{ "$set": { "a": 2 }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

db.junk.update({ "a": 2 },{ "$set": { "a": 2 }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

db.junk.update({ "a": 2 },{ "$set": { "a": NumberInt(2) }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

db.junk.update({ },{ "$set": { "a": NumberInt(2) }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

Wszystkie operacje w powłoce MongoDB od wersji 2.6 w rzeczywistości korzystają z Interfejsu API operacji zbiorczych . Tutaj zobaczysz WriteResult który pochodzi z tego interfejsu API jako dowód, że tak się dzieje.

Tak więc krótki przypadek polega na tym, że jeśli masz "ręcznie wstawione" elementy, które są właściwego typu, do którego modyfikujesz, to nie zostaną one zmienione.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Dlaczego łączenie się z MongoDB z Node.js jest wolne?

  2. Node.js + Mongoose / Mongo i skrócone pole _id

  3. Mongoose pobiera dokumenty pasujące do tablicy

  4. Jak zastosować atrybut BsonRepresentation według konwencji podczas korzystania z MongoDB

  5. Przenieś dane z PostgreSQL do MongoDB