我的应用程序中的每个用户都有11个不同的数字字段。我想构建一个api,以将这些字段之一增加一定量。
请求的格式如下:
{
"uid":"Qewqhfui7232289",
"field":"someName",
"value":13.4
}
然后api将检索ID为“ uid”的文档,并将someName字段增加13.4
我看到的大多数示例都将特定字段增加一个常数。
类似这样的方法(但实际上可行):
var router = express.Router();
router.post('/increment', function (req, res, next) {
var ref = db.collection('UserInfo').doc(req.body.uid);
var field=req.body.field;
var value=req.body.value;
var transaction = db.runTransaction(function(t) {
return t.get(ref)
.then(function(doc) {
var updated= doc.data().field + value;
t.update(ref, {field: updated);
});
}).then(function(result) {
console.log('Transaction success!');
}).catch(function(err) {
console.log('Transaction failure:', err);
});
res.send("response");
});
我需要为每个字段创建一个api吗?
firestore是否支持变量增量(即不是硬编码数字)?
编辑:一些澄清:
1)我只是打算编辑单个文档,而不是几个。
2)我想创建一个能够根据请求正文输入增加任何字段的api(而不是为每个字段创建api)。但这不是必需的,因为我可以创建几个api。
3)我的首要任务是了解如何使用通过req.body.value设置的变量而不是硬编码到api中的固定数字来递增。
EDIT2:我决定为每个字段创建一个API。
答案 0 :(得分:0)
一次调用Document.update()
可以更新文档中的多个字段。但是它只能更新单个文档。
我需要为每个字段创建一个api吗?
如果这些字段在单个文档中,则可以通过一次调用来更新所有字段,例如:
var data= doc.data();
t.update(ref, {field: data.field + value, field2: data.field2 + value, field3: data.field3 + value);
firestore是否支持变量增量(即不是硬编码数字)?
当前没有API告诉数据库服务器“增加此字段”,但是正在考虑这一点,甚至已经完成了工作。通常,尽管不能保证何时(甚至不知道)此功能会将其发布。