[英]JavaScript/FireStore - Cannot delete field key (UID variable)
我正在尝试制作一个表单,在提交时,它会先删除现有字段,然后再提交一个新字段。 该字段包含一个键,它是用户的 UID,值是时间戳。
当我对确切的键进行硬编码时它会起作用,但如果我将它用作变量它就不起作用。
此代码有效。
db.collection("jmTest").doc(docID).update({
"food.up.8ebenfqRMmapx84tRpCp6dY3F4j1": firebase.firestore.FieldValue.delete(),
"food.down.8ebenfqRMmapx84tRpCp6dY3F4j1": firebase.firestore.FieldValue.delete()
});
此代码不起作用。
var userUID = user.uid // declare and initialize
db.collection("jmTest").doc(docID).update({
"food.up.${userUID}": firebase.firestore.FieldValue.delete(),
"food.down.${userUID}": firebase.firestore.FieldValue.delete()
});
此代码不起作用。
db.collection("jmTest").doc(docID).update({
food: {
up: {
userUID: firebase.firestore.FieldValue.delete()
}
}
});
我也尝试过使用这些而不只是“uid”。
[userUID]
${userUID}
String(userUID)
此代码不起作用。
var userUID = user.uid // declare and initialize
var foodUp = "food.up." + [userUID];
var foodDown = "food.down." + [userUID];
db.collection("jmTest").doc(docID).update({
foodUp: firebase.firestore.FieldValue.delete(),
foodDown: firebase.firestore.FieldValue.delete()
});
在以下代码块中,您尝试使用模板化字符串,但用双引号而不是反引号将其括起来。 此外,不允许在 object 声明中使用模板字符串,因此还必须将它们括在方括号中才能使用表达式语法。
db.collection("jmTest").doc(docID).update({
"food.up.${userUID}": firebase.firestore.FieldValue.delete(),
"food.down.${userUID}": firebase.firestore.FieldValue.delete()
});
应该
db.collection("jmTest").doc(docID).update({
[`food.up.${userUID}`]: firebase.firestore.FieldValue.delete(),
[`food.down.${userUID}`]: firebase.firestore.FieldValue.delete()
});
以类似的方式,在以下几行中,您尝试使用变量的动态值,而是将键的名称指定为foodUp
和foodDown
,而不是使用表达式/变量的值作为键:
var userUID = user.uid // declare and initialize
var foodUp = "food.up." + [userUID]; // while this "works", use: "food.up." + userUID
var foodDown = "food.down." + [userUID];
db.collection("jmTest").doc(docID).update({
foodUp: firebase.firestore.FieldValue.delete(),
foodDown: firebase.firestore.FieldValue.delete()
});
应该
const userUID = user.uid // declare and initialize
const foodUp = "food.up." + userUID;
const foodDown = "food.down." + userUID;
db.collection("jmTest").doc(docID).update({
[foodUp]: firebase.firestore.FieldValue.delete(),
[foodDown]: firebase.firestore.FieldValue.delete()
});
或者
const userUID = user.uid // declare and initialize
db.collection("jmTest").doc(docID).update({
["food.up." + userUID]: firebase.firestore.FieldValue.delete(),
["food.down." + userUID]: firebase.firestore.FieldValue.delete()
});
使用上述代码块时,请注意userUID
不是null
或undefined
,因为它可能导致意外行为。
作为旁注,现在是 2022 年,在合适的地方使用let
和const
而不是var
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.