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