【发布时间】: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(仅用于调试)。
我尝试了第一个查询的几种变体,但找不到匹配项。
【问题讨论】: