您可以使用特殊标记 FieldPath.documentId()
来按 documentId 进行查询,例如:
const querySnap = collection.where(firebase.firestore.FieldPath.documentId(), '<', '100').get();
请注意,文档ID是字符串,因此这将包括具有ID“0”或“1”的文档,但不包括'2',因为在字典顺序上'2'> '100'。
因此,如果您想进行数字查询,您需要将文档ID作为文档中的数字字段编写,然后对其进行普通查询。
在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)
in
过滤器只接受最多 10 个条目,否则会抛出错误,因此如果您在生产代码中使用,请做好准备... - bsplosion我曾经为 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)
}
react-redux-firebase
的firebaseConnect
中是否有可能实现这个功能吗? - Blundering Philosopherimport * as firebase from 'firebase/app';
- Jonathan