diff --git a/lib/utils.js b/lib/utils.js
index <HASH>..<HASH> 100644
--- a/lib/utils.js
+++ b/lib/utils.js
@@ -171,12 +171,16 @@ var mergeClone = exports.mergeClone = function mergeClone (to, from) {
   while (i--) {
     key = keys[i];
     if ('undefined' === typeof to[key]) {
-      to[key] = clone(from[key]);
+      // make sure to retain key order here because of a bug handling the $each
+      // operator in mongodb 2.4.4
+      to[key] = clone(from[key], { retainKeyOrder : 1});
     } else {
       if (exports.isObject(from[key])) {
         mergeClone(to[key], from[key]);
       } else {
-        to[key] = clone(from[key]);
+        // make sure to retain key order here because of a bug handling the
+        // $each operator in mongodb 2.4.4
+        to[key] = clone(from[key], { retainKeyOrder : 1});
       }
     }
   }
Retain key order when copying objects

This is a necessary fix for an issue in Mongodb <I> where the order of
the $each operator matters when used with $push