Meter将新对象推送到集合中的数组

时间:2017-03-13 09:35:39

标签: javascript mongodb meteor meteor-collection2

我正在尝试通过推送到集合中已有的数组来更新集合。

以下是我尝试运行的更新功能:

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 [];
    },
  },
});

我正在使用autoValue players数组来创建新游戏时对其进行初始化。添加第一个玩家时会出现这个问题吗?

一些帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

已编辑: @ Logiwan992尝试使用defaultValue而不是autoValue。我相信您正在使用autoValue设置players的值,因此它未定义。但是对于您的实现,autoValue将在文档有更新时运行。

首先创建文档时,

defaultValue将运行。但是,如果您仍然选择使用autoValue,则可能还需要检查它是否为更新并返回undefine。如此

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

返回undefined将确保使用新的更新值。 我的建议是使用

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