Sie haben Recht, es gibt einige Inkonsistenzen in der Oplog-Implementierung von MongoDB, die ein Dokumentformat für jedes Oplog zulässt, das es technisch nicht zulässt, dass ein solches Dokument entsprechend abgefragt wird.
Auch das Einfügen desselben Eintrags ist nicht möglich, da er einen $set-Feldnamen hat:
db.tmp2.insert({
"ts" : Timestamp(1450117240, 1),
"h" : NumberLong(2523649590228245285),
"v" : NumberInt(2),
"op" : "u",
"ns" : "test.tmp",
"o2" : {
"_id" : ObjectId("566f069e63d6a355b2c446af")
},
"o" : {
"$set" : {
"b.d" : NumberInt(4)
}
}
})
2015-12-14T10:27:04.616-0800 E QUERY Error: field names cannot start with $ [$set]
at Error (<anonymous>)
at DBCollection._validateForStorage (src/mongo/shell/collection.js:161:19)
at DBCollection._validateForStorage (src/mongo/shell/collection.js:165:18)
at insert (src/mongo/shell/bulk_api.js:646:20)
at DBCollection.insert (src/mongo/shell/collection.js:243:18)
at (shell):1:9 at src/mongo/shell/collection.js:161
und das b.d ist für einen Schlüssel ungültig
db.tmp.update({ a: 1 }, { $set: { 'b.d': 4 } }, { upsert: true })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
db.oplog.rs.find()
db.tmp2.insert({
"ts" : Timestamp(1450117240, 1),
"h" : NumberLong(2523649590228245285),
"v" : NumberInt(2),
"op" : "u",
"ns" : "test.tmp",
"o2" : {
"_id" : ObjectId("566f069e63d6a355b2c446af")
},
"o" : {
"set" : {
"b.d" : NumberInt(4)
}
}
})
2015-12-14T10:23:26.491-0800 E QUERY Error: can't have . in field names [b.d]
at Error (<anonymous>)
at DBCollection._validateForStorage (src/mongo/shell/collection.js:157:19)
at DBCollection._validateForStorage (src/mongo/shell/collection.js:165:18)
at DBCollection._validateForStorage (src/mongo/shell/collection.js:165:18)
at insert (src/mongo/shell/bulk_api.js:646:20)
at DBCollection.insert (src/mongo/shell/collection.js:243:18)
at (shell):1:9 at src/mongo/shell/collection.js:157
Vielleicht sollte ein Jira-Problem protokolliert werden, das empfiehlt, eine Syntax mit der $set-Suche als Wert festzulegen:
{
"ts" : Timestamp(1450117240, 1),
"h" : NumberLong(2523649590228245285),
"v" : NumberInt(2),
"op" : "u",
"ns" : "test.tmp",
"o2" : {
"_id" : ObjectId("566f069e63d6a355b2c446af")
},
"o" : {
"$set" : {
"key" : "b.d"
"value" : NumberInt(4)
}
}
}
Update:Hierfür wurde ein Jira-Problem erstellt:
https://jira.mongodb.org/browse/SERVER-21889