我正在尝试编写一个NodeJS程序,该程序在给定的文档上,它会检查给定的字段列表中是否存在某个字段-假设我们要查找的键是key1
。如果该字段存在,则将其删除并添加一个新字段,并使该字段递增-key2
,并带有一些值。
// Get the `FieldValue` object
let FieldValue = require('firebase-admin').firestore.FieldValue;
// Create a document reference
let cityRef = db.collection('cities').doc('BJ');
// Remove the 'capital' field from the document
let removeCapital = cityRef.update({
capital: FieldValue.delete()
});
从文档中,我找到了删除字段的方法,但是我不确定如何检查密钥是否存在,因此程序知道删除后要创建什么密钥。
对于该程序,键可能是任意字母序列,后跟数字序列-key1
,key2
,key3
等,因此我需要一种方法来知道其中的哪一个存在以正确删除然后递增新的
答案 0 :(得分:2)
要了解文档的字段列表,您需要使用get()
方法来获取它,请参见https://firebase.google.com/docs/firestore/query-data/get-data和https://firebase.google.com/docs/reference/js/firebase.firestore.DocumentReference#get
例如:
let cityRef = db.collection('cities').doc('BJ');
cityRef.get().then(function(doc) {
if (doc.exists) {
console.log("Document data:", doc.data());
} else {
// doc.data() will be undefined in this case
console.log("No such document!");
}
}).catch(function(error) {
console.log("Error getting document:", error);
});
在上面的代码中,doc
是DocumentSnapshot
,如果调用data()
方法,它将返回“文档中的所有字段作为对象”。
您只需要遍历data()
方法返回的Object即可获得X
字段的值key(X)
,然后对其进行递增并编写一个新字段{{1} },例如update()
方法。
请注意,根据您的确切要求,您可能必须使用Transaction。