Не е провал, а по замисъл.
Под API за групови операции , ако предоставите стойност за актуализиране, която съответства на съществуваща стойност на документа, тогава тя не се маркира като променена и всъщност не прави никакъв опит да пренапише документа.
Прост тест:
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 })
Всички операции в обвивката на MongoDB от версия 2.6 всъщност използват API за групови операции . Тук виждате WriteResult
което идва от този API като доказателство, че това се случва.
Така че краткият случай тук е, че ако сте „вмъкнали ръчно“ елементи, които са от правилния тип, който модифицирате, тогава те не се променят.