我使用 Cloud Firestore 作为我的数据库
这是我网页上的表单代码,它在我的 Cloud Firestore 集合中创建一个名为“esequiz”的新文档。那么我该如何编码才能使其始终为数据库中的文档数加 1 呢?并设置数据库内文档数量的限制
form.addEventListener('submit', (e) => {
e.preventDefault();
db.collection('esequiz').add({
question: form.question.value,
right: form.right.value,
wrong: form.wrong.value
});
form.question.value = '';
form.right.value = '';
form.wrong.value = '';
});
It currently works but it will show up as an auto generated ID. How do I make it carry on from the numbers, like as my current documents? When i save I would like it to read the current last document id, OR simply count the number of documents, then just + 1
Andrei Cusnir 的见解是,不支持对 Cloud Firestore 中的文档进行计数。
现在我正在尝试 Andrei 的方法 2,按降序查询文档,然后使用 .limit 仅检索第一个文档。
UPDATED
form.addEventListener('submit', (e) => {
e.preventDefault();
let query = db.collection('esequiz');
let getvalue = query.orderBy('id', 'desc').limit(1).get();
let newvalue = getvalue + 1;
db.collection('esequiz').doc(newvalue).set({
question: form.question.value,
right: form.right.value,
wrong: form.wrong.value
});
form.question.value = '';
form.right.value = '';
form.wrong.value = '';
});
不再有错误,但是下面的代码返回 [object Promise]
让 getvalue = query.orderBy('id', 'desc').limit(1).get();
所以当我的表单保存时,它保存为[object Promise]1,我不知道为什么会这样。有人可以建议我如何返回文档 id 值而不是 [object Promise]
I think it is because I did specify to pull the document id as the value, how do I do so?
更新:最终解决方案
尝试了 Andrei 的代码,以下是最终有效的代码。非常感谢安德烈!
let query = db.collection('esequiz');
//let getvalue = query.orderBy('id', 'desc').limit(1).get();
//let newvalue = getvalue + 1;
query.orderBy('id', 'desc').limit(1).get().then(querySnapshot => {
querySnapshot.forEach(documentSnapshot => {
var newID = documentSnapshot.id;
console.log(`Found document at ${documentSnapshot.ref.path}`);
console.log(`Document's ID: ${documentSnapshot.id}`);
var newvalue = parseInt(newID, 10) + 1;
var ToString = ""+ newvalue;
db.collection('esequiz').doc(ToString).set({
id: newvalue,
question: form.question.value,
right: form.right.value,
wrong: form.wrong.value
});
});
});