2011-11-08 6 views
1

mongooseでmongoDBを書き込むと、操作は正常に処理されますが、私の文書は保存されますが、奇妙な他のsutffも書き留められます。それはモンゴースコードのようです。何が原因でしょうか?mongoDbでMongooseを保存すると、予期しない要素が保存される

resultReference.ref[arrayLocation].allEvents.push(theEvent); 

私は、特定の配列内のものを追加{ID:11、allEventsは:[]} REF素子の構造であり、そしてIはallEvents配列内theEventを押します。私はその後resultReference.save()

私はデータベースとしてexpress、mongoose、mongoHQを使用します。私は地元のmongoサーバーで試しましたが、この煩わしさはまだあります。私は私のコンソールにsave()の前に書き込む文書を印刷しましたが、この奇妙なコードは存在しません。

{ 
id 11 
allEvents 
[ 
0 
{ 
_events 
{ 
maxListeners 0 
} 
_doc  
{ 
_id {"$oid": "4eb87834f54944e263000003"} 
title "Test" 
allDay false 
start 2011-11-10 13:00:00 UTC 
end 2011-11-10 15:00:00 UTC 
url "/test/4eb87834f54944e263000002" 
color "#99CCFF" 
ref "4eb87834f54944e263000002" 
} 
_activePaths  
{ 
paths 
{ 
title "modify" 
allDay "modify" 
start "modify" 
end "modify" 
url "modify" 
color "modify" 
ref "modify" 
} 
states 
{ 
init  
{ } 
modify 
{ 
title true 
allDay true 
start true 
end true 
url true 
color true 
ref true 
} 
require 
{ } 
} 
stateNames 
[ 
0 "require" 
1 "modify" 
2 "init" 
] 
} 
_saveError null 
_validationError null 
isNew true 
_pres 
{ 
save  
[ 
0 
function (next) { 
    // we keep the error semaphore to make sure we don't 
    // call `save` unnecessarily (we only need 1 error) 
    var subdocs = 0 
     , error = false 
     , self = this; 

    var arrays = this._activePaths 
    .map('init', 'modify', function (i) { 
     return self.getValue(i); 
    }) 
    .filter(function (val) { 
     return (val && val instanceof DocumentArray && val.length); 
    }); 

    if (!arrays.length) 
     return next(); 

    arrays.forEach(function (array) { 
     subdocs += array.length; 
     array.forEach(function (value) { 
     if (!error) 
      value.save(function (err) { 
      if (!error) { 
       if (err) { 
       error = true; 
       next(err); 
       } else 
       --subdocs || next(); 
      } 
      }); 
     }); 
    }); 
    } 
1 "function checkForExistingErrors(next) { 
if (self._saveError){ 
next(self._saveError); 
self._saveError = null; 
} else { 
next(); 
} 
}" 
2 "function validation(next) { 
return self.validate.call(self, next); 
}" 
] 
} 
_posts 
{ 
save  
[ ] 
} 
save  
function() { 
     var self = this 
     , hookArgs // arguments eventually passed to the hook - are mutable 
     , lastArg = arguments[arguments.length-1] 
     , pres = this._pres[name] 
     , posts = this._posts[name] 
     , _total = pres.length 
     , _current = -1 
     , _asyncsLeft = proto[name].numAsyncPres 
     , _next = function() { 
      if (arguments[0] instanceof Error) { 
       return handleError(arguments[0]); 
      } 
      var _args = Array.prototype.slice.call(arguments) 
       , currPre 
       , preArgs; 
      if (_args.length && !(arguments[0] === null && typeof lastArg === 'function')) 
       hookArgs = _args; 
      if (++_current < _total) { 
       currPre = pres[_current] 
       if (currPre.isAsync && currPre.length < 2) 
       throw new Error("Your pre must have next and done arguments -- e.g., function (next, done, ...)"); 
       if (currPre.length < 1) 
       throw new Error("Your pre must have a next argument -- e.g., function (next, ...)"); 
       preArgs = (currPre.isAsync 
          ? [once(_next), once(_asyncsDone)] 
          : [once(_next)]).concat(hookArgs); 
       return currPre.apply(self, preArgs); 
      } else if (!proto[name].numAsyncPres) { 
       return _done.apply(self, hookArgs); 
      } 
      } 
     , _done = function() { 
      var args_ = Array.prototype.slice.call(arguments) 
       , ret, total_, current_, next_, done_, postArgs; 
      if (_current === _total) { 
       ret = fn.apply(self, args_); 
       total_ = posts.length; 
       current_ = -1; 
       next_ = function() { 
       if (arguments[0] instanceof Error) { 
        return handleError(arguments[0]); 
       } 
       var args_ = Array.prototype.slice.call(arguments, 1) 
        , currPost 
        , postArgs; 
       if (args_.length) hookArgs = args_; 
       if (++current_ < total_) { 
        currPost = posts[current_] 
        if (currPost.length < 1) 
        throw new Error("Your post must have a next argument -- e.g., function (next, ...)"); 
        postArgs = [once(next_)].concat(hookArgs); 
        return currPost.apply(self, postArgs); 
       } 
       }; 
       if (total_) return next_(); 
       return ret; 
      } 
      }; 
     if (_asyncsLeft) { 
     function _asyncsDone (err) { 
      if (err && err instanceof Error) { 
      return handleError(err); 
      } 
      --_asyncsLeft || _done.apply(self, hookArgs); 
     } 
     } 
     function handleError (err) { 
     if ('function' == typeof lastArg) 
      return lastArg(err); 
     if (errorCb) return errorCb.call(self, err); 
     throw err; 
     } 
     return _next.apply(this, arguments); 
    } 
errors null 
} 
] 
} 
] 

答えて

1

これは私のスキーマを適切な順序でマングースに保存しなかったためです。これは、親の前にあなたの子スキーマを宣言して、適切な動作をさせることを意味します。

関連する問題