我遇到了 Firestore 嵌套 map 和点表示法的问题。我在 Firestore 上有一个嵌套 map ,并且我正在尝试使用点表示法更新另一个对象中的对象。但是,似乎在使用点表示法时,它将被调用的键与 Firestore 中的对象名称连接起来,这不是所需的行为。
这是出现问题的代码片段:
if (doc && doc.exists) {
await doc.ref.update({subscription: {chartslab: {
"options.expiration": new Date(new Date().getTime()+(10*24*60*60*1000)),
"options.updatedAt": new Date().toISOString(),
}}}).then(() => {
return res.status(200).send("Document successfully updated!");
});
} else {
await doc.ref.set({subscription: {chartslab: {options: {
expiration: new Date(new Date().getTime()+(5*24*60*60*1000)),
}}}});
return res.status(200).send("Done");
}
在此代码中,当我尝试使用点表示法更新嵌套映射(对象)时,它将键名称“options.expiration”和“options.updatedAt”与 Firestore 中的对象名称连接起来。
但是,如果我更新没有点表示法的嵌套映射,它会覆盖整个映射字段,这不是期望的结果。
创建屏幕截图
更新屏幕截图
如何正确使用点表示法来更新 Firestore 中的特定嵌套对象,而不会出现此串联问题?任何实现这一目标的见解或替代方法将不胜感激。预先感谢您!
最佳答案
如果您使用点表示法更新嵌套字段,则必须以点表示法添加完整路径,如下所示:
await doc.ref.update({
'subscription.chartLabs.options.expiration': 'value',
'subscription.chartLabs.options.updatedAt': 'value'
})
有一个包裹flat如果您有很多嵌套字段需要更新,这在这种情况下会很有用。
const flatten = require('flat');
const updateObj = flatten({
subscription: {
chartLabs: {
options: {
expiration: '...',
updatedAt: '...'
}
}
}
})
由于您要更新整个“选项”对象,因此可以尝试以下操作:
await doc.ref.update({
'subscription.chartLabs.options': {
expiration: '...',
updatedAt: '...'
}
})
关于javascript - Firestore 嵌套 map - 用于更新嵌套对象的点表示法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69962525/