当前位置: 首页 > 知识库问答 >
问题:

通过ID查询Firebase Firestore文档

胡劲
2023-03-14

正如我从“云火数据模型”指南中得到的,“每个文档都由一个名称标识。”是否可以通过该文档标识符(即名称或ID)查询集合?

例如,集合“Things”中的文档具有IDs、1、2等。:

是否可以查询 ID 小于 100 的文档?

共有3个答案

向苗宣
2023-03-14

我一直在努力为Golang Firebase SDK找到这个,但最终得到了它。希望这能帮助外面的人!

package main
    
import (
  "context"
  "fmt"
  "log"

  "cloud.google.com/go/firestore"
  firebase "firebase.google.com/go/v4"
  "google.golang.org/api/option"
)

type (
  Car struct {
    ID    string
    Name  string  `firestore:"name"`
    Make  string  `firestore:"make"`
    Price float64 `firestore:"make"`
  }
)

func main() {
  ctx := context.Background()

  // Use a service account
  options := option.WithCredentialsFile("PATH/TO/SERVICE/FILE.json")

  // Set project id
  conf := &firebase.Config{ProjectID: "PROJECT_NAME"}

  // Initialize app
  app, err := firebase.NewApp(ctx, conf, options)
  if err != nil {
    log.Fatal(err)
  }

  // Get firestore client
  client, err := app.Firestore(ctx)
  if err != nil {
    log.Fatal(err)
  }
  defer client.Close()

  collectionRef := client.Collection("CAR_COLLECTION")
  
  // Create docment list of documents from "CAR_COLLECTION"
  var skipDocs []*firestore.DocumentRef
  idList := []string{"001", "002", "003"}
  for _, id := range idList {
    skipDocs = append(skipDocs, collectionRef.Doc(id))
  }

  // firestore.DocumentID == "__name__" 
  docs, err := collectionRef.Where(firestore.DocumentID, "not-in", skipDocs).Documents(ctx).GetAll()
  if err != nil {
    log.Fatal(err)
  }

  var carList []Car
  for _, doc := range docs {
    var car Car

    // Unmarshall item
    doc.DataTo(&car)
    car.ID = doc.Ref.ID

    // Add car to list
    carList = append(carList, car)
  }

  // Print car list
  fmt.Println(carList)
}
寇开畅
2023-03-14

python中,您应该使用完整的文档名称

from google.cloud import firestore
from google.cloud.firestore_v1.field_path import FieldPath

db = firestore.Client()
colRef = db.collection(u'docs')
filter = [db.document(u'docs/doc1'), db.collection(u'docs/doc3')]
query = colRef.where(FieldPath.document_id(), u'in', filter)
颛孙正卿
2023-03-14

您可以使用特殊的sentinel < code > field path . documentId()通过documentId进行查询,例如:

const querySnap = collection.where(firebase.firestore.FieldPath.documentId(), '<', '100').get();

但请注意,文档ID是字符串,因此这将包括ID为“0”或“1”的文档,而不是“2”,因为“2”是字符串

因此,如果需要数字查询,则需要将文档 ID 作为数字字段写入文档中,然后对其进行普通查询。

 类似资料:
  • 问题内容: 我希望创建一个查询,在其中将过滤出包含通配符的ID。例如,除了ID包含单词current之外,我想在所有地方搜索内容。这可能吗? 问题答案: 是的,可以使用正则表达式过滤器 /正则表达式查询。我无法找到一种使用Complement选项直接执行此操作的方法,因此我已经 暂时解决了您的问题。如有可能,我会在稍后完善答案。

  • 问题内容: 我想通过查找数据。我知道该数据存在并且存在(我已经用pymongo测试了它)。 但是下面的代码找不到它: 它只是给我一个回报。 但是我可以使用pytmongo和python找到它。 结果如下: 有人有什么主意吗? 编辑:我已经尝试了: 但我仍然有0: 问题答案: 您可以使用然后仅传递id值,或者使用,然后还必须使用字段名称指定一个值: 如果没有错误,则表示找到了文档。 如果您始终看到已

  • 问题内容: 以下定位技术之间有什么区别? 而且,从 性能角度来看 ,哪种方法是通过id定位元素的最快方法? 问题答案: 您的问题很难回答,肯定会给出一个结论性的答案。实际上,我很想将此问题标记为“太宽泛”,其他答案和评论也支持该问题。 以您的为例。纵观Selenium来源, 大多数 驱动程序只是获取您提供的ID,然后将其传递给有线协议: 如您所知,每个浏览器供应商都在单独的二进制文件中实现自己的有

  • 我正在寻找一种通过文档id而不是字段进行查询的方法。 可能是这样的: 在这种情况下,searchInput是一个不完整的documentId。 我在Stackoverflow上看到了一个解决方案,但它不适用于Flatter:https://stackoverflow.com/a/52252264/8539070 要记住的另一件事是,我正在尝试显示集合中与id的某些部分匹配的所有文档的列表。 谢谢你

  • 问题内容: 假设我在Access中具有以下信息的表格: 我的问题是,如何将第二列中的值连接到基于第一列的行值。我想要的查询结果如下: 我想通过查询来实现。有人可以帮我实现吗? 问题答案: 使用数据的示例:

  • 我正在尝试通过以下步骤通过 spark-1.6.0 和 scala-2.11.7 从 Cassandra 2.0.17 表中获取值 已启动cassandra--服务cassandr启动 已启动spark--sbin/start all。sh 规定的火花标度-箱/火花壳-罐子火花-盒-连接器_2.10-1.5.0-M1.jar 在 Scala 中执行了这些命令 直到现在一切都很好,但当我执行- 它给