2017-03-13 1 views
0

Ich versuche, eine Sammlung zu aktualisieren, indem Sie auf ein bereits vorhandenes Array in der Sammlung drücken.Meter Push neues Objekt zu Array in der Sammlung

Hier ist die Update-Funktion, die ich zu laufen versuche:

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

Hier ist der Fehler, den ich in der Konsole bin immer:

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

Relevante schemas:

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

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

Ich verwende das autoValue für das players Array, um es zu initialisieren, wenn Ein neues Spiel wird erstellt. Könnte das ein Problem sein, wenn der erste Spieler hinzugefügt wird?

Einige Hilfe wäre willkommen.

+0

Ich hatte das gleiche Problem in diesen Tagen zu verwenden. Es ist mir gelungen, defaultValue anstelle von autoValue zu verwenden. Wenn Sie nur die Eigenschaft initialisieren möchten, ist defautyValue genau das, was Sie wollen. –

Antwort

1

Edited: @ Logiwan992 versuchen Sie es mit default statt autoValue.I glauben Sie verwenden Autowert den Wert von players einzustellen, damit es nicht undefiniert ist. Mit Ihrer Implementierung wird autoValue jedoch ausgeführt, wenn ein Update für Ihr Dokument vorliegt.

defaultValue würde ausgeführt werden, wenn das Dokument zuerst erstellt wird. Wenn Sie jedoch weiterhin autoValue verwenden möchten, sollten Sie auch überprüfen, ob es sich um ein Update handelt, und undefine zurückgeben. Wie in dieser

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

wird das neue Update Wert würde sicherstellen, undefined Returning verwendet. Meine Empfehlung ist, obwohl

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

+0

Eine kurze Erklärung, warum er versuchen sollte zu verwenden, würde dies eine Antwort geben. – mkl

Verwandte Themen