我试图运行以下代码:
function updateUserLimitations(userId, limitations, batchOrTransaction = undefined) {
const userLimitationsRef = firestore
.collection("users")
.doc(userId)
.collection("limitations")
.doc("userLimitations");
if (batchOrTransaction) {
return batchOrTransaction.set(
userLimitationsRef,
limitations,
{ merge: true }
);
}
return userLimitationsRef.set(limitations, { merge: true });
}updateUserLimitations(userId,{ "messages.totalMessages":admin.firestore.FieldValue.increment(1) });
但是..。
而不是在我的db中获取这些文档数据:
{ // Doc data
messages: {
initialDate: timestamp, // Date of the first message (I need to preserve it),
totalMessages: 20,
},
}我得到了:
{
...other doc data...,
messages.totalMessages: 20,
}我需要带有合并选项的set,因为我正在更新并创建如果文档不存在.。
有什么想法吗?我在这里做错什么了吗?
发布于 2021-12-01 12:08:48
可以使用对象“设置”嵌套数据:
{
messages: {
totalMessages: 20,
}
}“点”表示法用于对嵌套数据应用更新。
发布于 2021-12-01 12:26:01
发布于 2021-12-01 12:32:18
用我目前的实现
function updateUserLimitations(userId, limitations, batchOrTransaction = undefined) {
const userLimitationsRef = firestore
.collection("users")
.doc(userId)
.collection("limitations")
.doc("userLimitations");
if (batchOrTransaction) {
return batchOrTransaction.set(
userLimitationsRef,
limitations,
{ merge: true }
);
}
return userLimitationsRef.set(limitations, { merge: true });
}我也可以深入更新文档消息字段,如下所示:
updateUserLimitations(
userId,
{
messages: {
totalMessages: admin.firestore.FieldValue.increment(1),
}
}
);它保留所有以前存在的对象字段,并更新特定的对象字段。
{ // Doc data
messages: {
initialDate: timestamp, // PRESERVED!
totalMessages: 21,
},
}https://stackoverflow.com/questions/70183767
复制相似问题