I can confirm that Mongo 2.4 differs from Mongo 3.2 in this case: 3.2: > db.foo.update({_id: "a"}, {$bit: {"a": {"or": NumberLong(1)}}}, {upsert: 1}) WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : "a" }) > db.foo.find() { "_id" : "a", "a" : NumberLong(1) } > 2.4: > db.foo.update({_id: "a"}, {$bit: {"a": {"or": NumberLong(1)}}}, {upsert: 1}) Cannot use commands write mode, degrading to compatibility mode WriteResult({ "nMatched" : 0, "nUpserted" : 0 }) > db.foo.find() I can also confirm that if I only have Mongo 2.4 installed on my machine and I run: cd $GOPATH/src/github.com/juju/juju/state/presence I get a lot of failures of the form: ---------------------------------------------------------------------- FAIL: pingbatcher_test.go:251: PingBatcherSuite.TestPingBatcherFlushesOnShutdown [LOG] 0:00.000 INFO juju.state.presence faking presence to time slot 0 pingbatcher_test.go:266: // And now we find it c.Assert(s.pings.FindId(docId).One(&res), jc.ErrorIsNil) ... value *errors.errorString = &errors.errorString{s:"not found"} ("not found") [LOG] 0:00.003 INFO juju.state.presence not faking presence time. Real time slot in use. So this should have been caught just by running the unit test suite on Trusty. On Mon, Oct 2, 2017 at 1:30 PM, John Meinel