猫鼬-findOneAndUpdate动态$推入数组

时间:2020-07-05 05:29:55

标签: javascript arrays mongodb mongoose subdocument

我正在尝试将新值动态添加到数组字段中。

最近取得了足够的进展,不必费心在这里问他们,尽管这是我认为确实应该提出的一个问题!因此,从这里开始是我的模式:

  var ugh = new mongoose.Schema({
    yes: String,
    bio: String,
    keys: [{ 
      nickname: String,
      data1: String,
      data2: Boolean,
      data3: String,
      data4: String,
    }]
  });

  var ughhh = mongoose.model('X', ugh, 'x');

这是我要编写以解决的解析器:

      setSomething: async (root, { nickname, data1, data2, data3, data4 }, { userId }) => {
        if (nickname) {
        let action = await ughhh.findOneAndUpdate(
          { _id: userId }, 
          { $set: 
            { 
              'keys.0.nickname': nickname, 
              'keys.0.data1': data1,
              'keys.0.data2': data2,  
              'keys.0.data3': data3,
              'keys.0.data4': data4,
            },
          }, 
          {
          new: true,
          upsert: true,
        });
        action;
        }
        return null;
      },
    },

现在,我喜欢从0开始对新设置的键进行数字排序。

但是当我尝试$set时,它将替换值,而不是将新条目添加到数组中!

如何将新条目添加到数组中而不是替换当前值,我更喜欢添加具有唯一ID或键的新条目以供将来参考

2 个答案:

答案 0 :(得分:1)

您可以像下面那样将数组字段推入:

 { $push: 
      keys: { 
          'nickname': nickname, 
           'data1': data1,
           'data2': data2,  
           'data3': data3,
           'data4': data4
       }
   }

请注意,当您将新项目推入数组时,它将生成一个唯一的'_id'字段,该字段对于将来的参考很有用

答案 1 :(得分:0)

          { $push: { 
              keys: { 
                nickname: nickname,
                data1: data1,
                data2: data2,
                data3: data3,
                data4: data4,
              } 
            } 
          },

确实解决了这个问题:)