【问题标题】:Trouble updating a Mongoose Array entry更新 Mongoose 阵列条目时遇到问题
【发布时间】:2019-06-06 08:40:18
【问题描述】:

我正在尝试使用对象数组更新文档。

如果设备对象存在,我想替换令牌值。如果它不存在,则将新的device/token 对推送到阵列上。

我尝试了几种方法来在查询和位置集选项中获得匹配。

由于某种原因,如果设备已经存在,我无法获得修改后的令牌值。

const fcmSchema =  mongoose.Schema({
  fcmtoken: String,
  device: String,
});

const dbuserSchema = mongoose.Schema({
  email: { type: String, required: true, unique: true },
  fcm: [fcmSchema],

})

const fcm = {
    fcmtoken: fcmtoken,
    device: device
}

dbUsers.findOneAndUpdate({ email: email, 'fcm': { $elemMatch : { 'device': 'web' }}}, { $set: {'fcm.$.device': 'worked', 'fcm.$.fcmtoken': 'worked'}},  {'new': true},  (err, doc) => {
    console.log('DOC:', doc);
    console.log('ERROR:', err);

if (!doc) {
          return dbUsers
          .findOneAndUpdate({ 'email': email }, {$push: { "fcm": fcm}}, {'new': true},  (err, doc) => {
            console.log('DOC1:', doc);
            console.log('ERROR1:', err);
        }

我期望的结果是第一次传递时数组中没有值,第二次findOneAndUpdate 将在数组上推送一个初始值。

在令牌更改的某个时刻,第一个 findOneAndUpdate 将匹配并将设备和令牌值更改为 worked(仅用于调试)。

我尝试了第一个查询的几种变体,但找不到匹配项。

【问题讨论】:

    标签: arrays mongoose element


    【解决方案1】:

    我终于把这个范围缩小到另一个在数据库条目上的函数。代码很好,只是之前的调用覆盖了 fcm 数组。谢谢!

    【讨论】:

      猜你喜欢
      • 2022-01-09
      • 2020-11-29
      • 2020-11-10
      • 1970-01-01
      • 2021-04-07
      • 1970-01-01
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      相关资源
      最近更新 更多