作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用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 = '';
});
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 = '';
});
let getvalue = query.orderBy('id', 'desc').limit(1).get();
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
});
});
});
最佳答案
如果我正确理解,您正在向Cloud Firestore添加数据,每个新文档的名称都会有一个增量编号。
如果查询所有文档,然后计算其中有多少,那么随着数据库的增加,最终将读取许多文档。别忘了Cloud Firestore会按文件读写收取费用,因此,如果您有100个文件,并且要添加ID为101的新文件,那么先读取所有文件然后计算它们的方法将使您花费很多100次读取,然后1次写入。下次它将花费您101次读取和1次写入。随着数据库的增加,它将继续进行。
我看到的方式来自两种不同的方法:
方法1:
您可以有一个文档,其中包含数据库的所有信息以及名称的别名。
例如
The structure of the database:
esequiz:
0:
last_document: 2
1:
question: "What is 3+3?
right: "6"
wrong: "0"
2:
question: "What is 2+3?
right: "5"
wrong: "0"
last_document + 1
的新文档记为1 WRITE last_document = 3;
计为1 WRITE The structure of the database (Same as before, but without the additional doc):
esequiz:
1:
question: "What is 3+3?
right: "6"
wrong: "0"
2:
question: "What is 2+3?
right: "5"
wrong: "0"
direction=firestore.Query.DESCENDING
与limit(1)
结合使用,这将为您提供最后的文档。 计为1个READ esequiz:
1:
id: 1
question: "What is 3+3?
right: "6"
wrong: "0"
2:
id:2
question: "What is 2+3?
right: "5"
wrong: "0"
const {Firestore} = require('@google-cloud/firestore');
const firestore = new Firestore();
async function getLastDocument(){
let query = firestore.collection('esequiz');
query.orderBy('id', 'desc').limit(1).get().then(querySnapshot => {
querySnapshot.forEach(documentSnapshot => {
console.log(`Found document at ${documentSnapshot.ref.path}`);
console.log(`Document's ID: ${documentSnapshot.id}`);
});
});
}
OUTPUT:
Found document at esequiz/2
Document's ID: 2
$ gcloud auth login
Y
并按Enter键$ gcloud config set project PROJECT_ID
。现在,您可以构建一个简单的app.js脚本并执行它。 nano app.js
node app.js
Error: Cannot find module '@google-cloud/firestore'
@google-cloud/firestore
,但尚未安装它。
@google-cloud/firestore
库:$ npm i @google-cloud/firestore
。在DOC中描述。 $ node app.js
。 Document with ID: 3 is written.
Document with ID: 4 is written.
关于javascript - 如何将具有动态ID的文档保存到Cloud Firestore?不断变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59857586/
我是一名优秀的程序员,十分优秀!