Проблема с обновлением записи массива Mongoose - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь обновить документ массивом объектов.

Если объект устройства существует, я хочу заменить значение токена.Если он не существует, вставьте новую пару 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 голосов
/ 06 июня 2019

Я наконец сузил это до другой функции, наступающей на запись в БД.Код был в порядке, просто предыдущий вызов переписал массив fcm.Спасибо!

...