简体   繁体   中英

Meter push new object to array in collection

I am trying to update a collection by pushing to an already existing array in the collection.

Here is the update function I am trying to run:

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

Here is the error I am getting in the console:

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

Relevant schemas:

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

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

I am using the autoValue for the players array to sort of initialize it when a new game is created. Could this be a problem for when the first player is added?

Some help would be appreciated.

Edited: @Logiwan992 try using defaultValue instead of autoValue.I believe you're using autoValue to set the value of players so it isn't undefined. But with your implementation, autoValue would run when there is an update on your document.

defaultValue would run when the document is created first. But if you still choose to use autoValue , you may also want to check if it's an update and return undefine . As in this

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

Returning undefined would ensure the new update value is used. My recommendation though is to use

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM