我正在尝试使用对象数组更新文档。
如果设备对象存在,我要替换令牌值。如果不存在,则将新的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
(仅用于调试)。
我尝试了第一个查询的几种变体,但找不到匹配项。
答案 0 :(得分:0)
我最终将这个范围缩小到了踏入数据库条目的另一项功能。代码很好,只是之前的调用覆盖了fcm数组。谢谢!