无法更新Mongoose Array条目

时间:2019-06-04 16:39:11

标签: arrays mongoose element

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

如果设备对象存在,我要替换令牌值。如果不存在,则将新的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(仅用于调试)。

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

1 个答案:

答案 0 :(得分:0)

我最终将这个范围缩小到了踏入数据库条目的另一项功能。代码很好,只是之前的调用覆盖了fcm数组。谢谢!