Для меня это выглядит как синтаксическая ошибка: метод обновления принимает четыре аргумента, два объекта и два логических значения, а не только один объект. Таким образом,
db.users.update({{"posts.a": {"$exists" : true} },
{"$push" : {"posts.$.a.test": {"d" : 2}}}, true, false })
следует читать
db.users.update({"posts.a": {"$exists" : true} },
{"$push" : {"posts.$.a.test": {"d" : 2}}}, true, false)