// Tests that $ field names are not allowed, but you can use a $ anywhere else. t = db.getCollection( "foo_basic9" ); t.drop() // more diagnostics on bad save, if exception fails doBadSave = function(param) { print("doing save with " + tojson(param)) var res = t.save(param); // Should not get here. print('Should have errored out: ' + tojson(res)); } t.save({foo$foo:5}); t.save({foo$:5}); assert.throws(doBadSave, [{$foo:5}], "key names aren't allowed to start with $ doesn't work"); assert.throws(doBadSave, [{x:{$foo:5}}], "embedded key names aren't allowed to start with $ doesn't work");