Как использовать Firestore DocumentID __name__ в запросе - PullRequest
1 голос
/ 02 августа 2020

Я планирую использовать селектор запросов «in» для возврата нескольких документов на основе списка идентификаторов. Однако я упростил использование "==" для этого примера:

collection := server.Firestore.Collection("foo")

// Add a document:

ref, _, err := collection.Add(ctx, map[string]string{"a": "b"})
if err != nil {
    panic(err)
}

// Here's the document ID:

fmt.Println("ref.ID", ref.ID)

// Get all the documents in the collection just to check it's there:

allDocs, err := collection.Query.Documents(ctx).GetAll()
if err != nil {
    panic(err)
}
fmt.Println("len(allDocs):", len(allDocs))

// Check our document is the one in the collection:

fmt.Println("allDocs[0].Ref.ID", allDocs[0].Ref.ID)

// Get the document using __name__ query:

docQuery, err := collection.Query.Where(firestore.DocumentID, "==", ref.ID).Documents(ctx).GetAll()
if err != nil {
    panic(err)
}
fmt.Println("len(docQuery):", len(docQuery))

Вывод:

ref.ID NF3CCjDikC9iHPubGA8o
len(allDocs): 1
allDocs[0].Ref.ID NF3CCjDikC9iHPubGA8o
len(docQuery): 0

Насколько я могу судить, приведенный выше код должен возвращать один документ в запрос. Я неправильно использую селектор DocumentID ("__ name __")?

1 Ответ

1 голос
/ 04 августа 2020

Хорошо, я разобрался. Изменение окончательного запроса на:

Where(firestore.DocumentID, "==", ref)

... например, передача всего *firestore.DocumentRef вместо string работает как в эмуляторе, так и в производственном Firestore.

Передача строки не возвращает результатов в обеих средах, но при использовании эмулятора он молча терпит неудачу и не возвращает ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...