javascript - 使用 Firestore REST API 在结构化查询中设置“orderBy”
问题描述
第一篇文章,所以任何提示将不胜感激。我正在尝试使用 REST api 在 StructuredQuery 中设置一个“orderBy”来进行存储。如果未使用 orderBy 字段,请注意我的查询确实有效,这也很有帮助。
我的查询如下所示:
var collection = "testing";
var Query = { //body of the http request
"structuredQuery": {
"from": {
"collectionId":collection,
"allDescendants":true
},
"orderBy": {
"field": {
"fieldPath" : "uploaded"
},
"direction" : "DESCENDING"
},
"limit": 1
},
"newTransaction": {}
}
var urlPOST = "https://firestore.googleapis.com/v1beta1/projects/"+id+"/databases/"+database+"/documents:runQuery?key="+key;
var optPOST = { //http header
'method' : 'post',
'contentType' : 'application/json',
'muteHttpExceptions': true,
'payload': JSON.stringify(Query)
};
var response = UrlFetchApp.fetch(urlPOST, optPOST);
从这个请求我得到:
"error": {
"code": 400,
"message": "The query requires a COLLECTION_GROUP_DESC index for collection testing and field uploaded. You can create it here: https://console.firebase.google.com/project/<mydatabase>/database/firestore/indexes/single-field ",
"status": "FAILED_PRECONDITION"
}
Googles firestore API doco 说它应该给我一个链接来创建所需的索引,但是这里返回的链接没有这样做,而是让我返回到概述页面。
关于我正在尝试做的更多细节:我希望能够从数据库中获取最后上传的文档。我通过一个字段“上传”来做到这一点,它只是一个时间戳字段(通过调用 firestore.SERVER_TIMESTAMP 的 firestore_admin 库通过 python 脚本上传)
让我知道是否需要更多信息
提前致谢
解决方案
TL;DR - 该allDescendants
字段现在没有做任何有用的事情,你不应该使用它。它被放入协议中是为了期待尚未推出的名为“收集组查询”的功能。
如您所见,除了其他约束子句之外,每个 Firestore 查询都有一个parent
和一个目标。collectionId
在你的情况下parent
是/projects/$YOUR_PROJECT/datbases/(default)/
,所以基本上是你的数据库的根。collectionId
是您正在搜索文档的集合的名称,您已将其指定为testing
。
当allDescendants
为 false 时,它将仅搜索具有该名称且是父代的直接后代的集合。在这种情况下,这意味着它将搜索集合/testing
。
如果allDescendants
设置为true
search 将覆盖在 parent 下任何深度名为“testing”的任何集合。因此,不仅如此/testing
,而且像/widgets/foo/testing
然而,完成此查询需要我们所谓的“集合组”索引,如错误消息中所示。现在你没有办法创建这样的索引,这就是为什么我上面说这个参数基本上没有用。
正如我们在其他一些论坛上所说,我们确实打算在将来发布这种类型的查询,在这种情况下,allDescendants
参数会更有用。
推荐阅读
- vba - 访问数据库 VB
- reactjs - SyntaxError:意外的令牌,预期的“,”
- godot - 如何在 GDScript 中通过拖动使 KinematicBody2D 沿一个方向移动?
- javascript - 如何使用 javascript 获取实时流媒体视频?
- android - 如何将显示器切换到 HDR 模式
- typescript - 如何将接口定义为类属性?
- javascript - assets 文件夹中的图像是否也部署在 Vue 项目中?
- javascript - 当屏幕焦点在反应导航 v5 中时,如何运行函数并获取数据?反应原生
- java - 如何使用 BITWISE 运算符删除数组中的重复元素?
- excel - 将数字从 1 张复制到多张