繁体   English   中英

JavaScript/FireStore - 无法删除字段键(UID 变量)

[英]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()
});

工作示例 1 工作示例 2

此代码不起作用。

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()
});

以类似的方式,在以下几行中,您尝试使用变量的动态值,而是将键的名称指定为foodUpfoodDown ,而不是使用表达式/变量的值作为键:

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不是nullundefined ,因为它可能导致意外行为。

作为旁注,现在是 2022 年,在合适的地方使用letconst而不是var

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM