Firestore, где 'IN' запрос на Google Store облачных FireStore - PullRequest
0 голосов
/ 24 января 2020

(Использование машинописи для лучшей читабельности. Ваниль js всегда приветствуется)

Nodejs Приложение, использующее следующие импорта:

import { FieldPath, DocumentReference } from '@google-cloud/firestore';

и это функция

async getByIds(ids: DocumentReference[]) {
    const collection = this.db.client.collection('authors');
    const query = await collection.where(FieldPath.documentId(), 'in', ids).get();

    return query.docs.map(d => ({ id: d.id, ...d.data() }));
}

возвращает именно эту ошибку c:

The corresponding value for FieldPath.documentId() must be a string or a DocumentReference.

Отладчик подтверждает, что идентификаторы фактически являются массивом DocumentReference.

Может быть, пакет @google-cloud/firestore не выровнен с пакетом Firebase?

РЕДАКТИРОВАТЬ: , как отметил Дуг в своем комментарии, я забыл поставить код для this.db.client. Вот вам:

export class DatabaseProvider {
    private _db: Firestore;
    get client(): Firestore {
        return this._db;
    }

    constructor() {
        this._db = new Firestore({
            projectId: ...,
            keyFilename: ...
        });
    }
}

И используется как

const db = new DatabaseProvider();

1 Ответ

2 голосов
/ 24 января 2020

Похоже, что вы пытаетесь получить пакетное получение, доступное другим способом: getAll(). Я думаю, что вы хотите это:

async getByIds(ids: DocumentReference[]) {
  return this.db.client.getAll(...ids);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...