2017-03-13 17 views
0

コレクションの既存の配列にプッシュしてコレクションを更新しようとしています。ここでメーターが新しいオブジェクトをコレクション内の配列にプッシュ

は、私が実行しようとしています更新機能である:ここで

Games.update({ _id: game._id }, { 
    $push: { players: { name: playerName } }, 
}); 

は、私は、コンソールに取得していますエラーです:

update failed: MongoError: Cannot update 'players' and 'players' at the same time 

関連スキーマ:

Player = new SimpleSchema({ 
    name: { 
    type: String, 
    label: 'name', 
    max: 50, 
    }, 
}); 

Schemas.Game = new SimpleSchema({ 
    ... 
    players: { 
    type: [Player], 
    label: 'Players', 
    autoValue: function() { 
     return []; 
    }, 
    }, 
}); 

players配列にはautoValueを使用しています。新しいゲームが作成されます。これは最初のプレーヤーが追加されたときの問題かもしれませんか?

何か助けていただければ幸いです。

+0

を使用することです私は、これらの日、この同じ問題を抱えていました。私はautoValueの代わりにdefaultValueを使用して管理しました。必要なのは、プロパティを初期化するだけであれば、defautValueは必要なものです。 –

答えて

1

編集: @ Logiwan992ので、それは未定義ではありませんあなたはplayersの値を設定する自動入力値を使用していると信じて代わりautoValue.IのはdefaultValueを使用してみてください。しかし、あなたの実装では、ドキュメントに更新があるときにautoValueが実行されます。

defaultValueは、ドキュメントが最初に作成されたときに実行されます。しかし、まだautoValueを使用することを選択した場合は、それがアップデートかどうかを確認して、undefineを返すこともできます。未定義戻るこの

players: { type: [Player], label: 'Players', autoValue: function() { if (this.isUpdate) { return undefined; } return []; }, },

のように新しい更新値が使用されていることを確認します。 私の推薦はしかし

players: { type: [Player], label: 'Players', defaultValue: [], },

+0

なぜそれを使って試してみるべきかという簡単な説明はこれを答えにします。 – mkl

関連する問題