推入 mongoose 对象内部的数组

Posted

技术标签:

【中文标题】推入 mongoose 对象内部的数组【英文标题】:Pushing into an array inside of a mongoose object 【发布时间】:2015-11-14 18:33:10 【问题描述】:

当玩家加入游戏时,我正在使用 mongoose 将玩家推入 mongoose 中的玩家数组。我收到以下错误: "Can't canonicalize query: BadValue unknown top level operator: $push"

我如何格式化 $push 似乎有问题,但是 我试图遵循这个答案,但不确定我的代码与它们的实现有何不同: pushing object into array schema in Mongoose

我有以下架构:

var GameSchema = new mongoose.Schema(
_id: mongoose.Schema.Types.Mixed,
players: [
  username: String,
  currentRound: Number
],
// the number represents the qNumber in the questionData.js
// and also the round number for what the player is currently on
questions: [Number]
);

以及下面的更新调用

var Game = mongoose.model('Game', GameSchema);

var updateGame = function(req,res,next)
Game.findByIdAndUpdate(
  req.body.code,
  $push: "players": username: "hardcode", currentRound: 1,
  safe: true, upsert: true, new: true,
  function(err, model)
    if (err)
      console.log("ERROR: ", err);
      res.send(500, err);
    else
      res.status(200).send(model);
    
  
);
;

【问题讨论】:

【参考方案1】:

啊,我总是一问就想办法解决。

事实证明,因为我覆盖了架构中的 _id 键,所以 Game.findByIdAndUpdate 不起作用。 相反,我使用 findOneAndUpdate 传入 _id 键:

Game.findOneAndUpdate(
"_id":req.body.code,
$push: "players": username: "hardcode", currentRound: 1,
safe: true, upsert: true, new: true,
function(err, model)
   if (err)
     console.log("ERROR: ", err);
     res.send(500, err);
   else
     res.status(200).send(model);
   
  
);

【讨论】:

以上是关于推入 mongoose 对象内部的数组的主要内容,如果未能解决你的问题,请参考以下文章

推入 Mongoose 数组不会更新数组

mongoose.findByIdAndUpdate 只会保存被推入数组的对象的第一个键值

mongoose.findByIdAndUpdate 只会保存被推入数组的对象的第一个键值

Mongoose更新嵌套数组

Mongoose/Node:将元素推入数组类型的文档字段?

Mongoose:将字符串推入数组