我正在尝试通过推送到集合中已有的数组来更新集合。
以下是我尝试运行的更新功能:
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
数组来创建新游戏时对其进行初始化。添加第一个玩家时会出现这个问题吗?
一些帮助将不胜感激。
答案 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: [],
},