// Check some $rename cases with a missing source. SERVER-4845 t = db.jstests_rename5; t.drop(); t.ensureIndex({a: 1}); t.save({b: 1}); t.update({}, {$rename: {a: 'b'}}); assert.eq(1, t.findOne().b); // Test with another modifier. t.update({}, {$rename: {a: 'b'}, $set: {x: 1}}); assert.eq(1, t.findOne().b); assert.eq(1, t.findOne().x); // Test with an in place modifier. t.update({}, {$rename: {a: 'b'}, $inc: {x: 1}}); assert.eq(1, t.findOne().b); assert.eq(2, t.findOne().x); // Check similar cases with upserts. t.drop(); t.remove({}); t.update({b: 1}, {$rename: {a: 'b'}}, true); assert.eq(1, t.findOne().b); t.remove({}); t.update({b: 1}, {$rename: {a: 'b'}, $set: {c: 1}}, true); assert.eq(1, t.findOne().b); assert.eq(1, t.findOne().c); t.remove({}); t.update({b: 1, c: 2}, {$rename: {a: 'b'}, $inc: {c: 1}}, true); assert.eq(1, t.findOne().b); assert.eq(3, t.findOne().c); // Check a similar case with multiple renames of an unindexed document. t.drop(); t.save({b: 1, x: 1}); t.update({}, {$rename: {a: 'b', x: 'y'}}); assert.eq(1, t.findOne().b); assert.eq(1, t.findOne().y); assert(!t.findOne().x);