我正在嘗試運行此代碼:
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, // Date of the first message (I need to preserve it),
totalMessages: 20,
},
}
我正進入(狀態:
{
...other doc data...,
messages.totalMessages: 20,
}
我需要一套與合并選項,因為我更新,如果檔案不存在,創造...。
有任何想法嗎?我在這里做錯了嗎?
uj5u.com熱心網友回復:
您可以使用物件來“設定”嵌套資料:
{
messages: {
totalMessages: 20,
}
}
“點”符號用于對嵌套資料應用更新。
uj5u.com熱心網友回復:
要解決這個問題,您必須使用該update()函式而不是set(). 因此,請更改以下代碼行:
return userLimitationsRef.set(limitations, { merge: true });
到:
return userLimitationsRef.update(limitations, { merge: true });
和你的:
updateUserLimitations(userId, { "messages.totalMessages": admin.firestore.FieldValue.increment(1) });
它會按預期作業。
uj5u.com熱心網友回復:
隨著我目前的實施
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://www.uj5u.com/ruanti/370581.html
標籤:javascript 火力基地 谷歌云firestore
