firebase Firestore嵌套Map-更新嵌套对象的点标记问题

rqdpfwrv  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(106)

我面临着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");
}

字符串
在这段代码中,当我尝试使用点表示法更新嵌套的map(对象)时,它将键名“options.expiration”和“options.updatedAt”与Firerestore中的对象名连接起来。
但是,如果我更新嵌套Map而不使用点标记法,它会覆盖整个Map字段,这不是所希望的结果。

创建截图

x1c 0d1x的数据

更新截图



如何正确地使用点表示法来更新Firerestore中的特定嵌套对象,而不会出现这种连接问题?任何实现这一点的见解或替代方法将不胜感激。在此先谢谢您!

wztqucjr

wztqucjr1#

如果使用点表示法更新嵌套字段,则必须添加点表示法中的完整路径,如下所示:

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: '...'
      }
    }
  }
})


由于您正在更新整个'options'对象,您可以尝试以下操作:

await doc.ref.update({
  'subscription.chartLabs.options': {
    expiration: '...',
    updatedAt: '...'
  }
})

相关问题