Включите идентификатор документа в качестве идентификатора поля в firestore - PullRequest
1 голос
/ 20 января 2020

Вот чего я пытаюсь достичь, я хочу уникальное поле идентификатора для каждого документа в моей базе данных, и я хочу, чтобы этот уникальный идентификатор совпадал с идентификатором документа.

Пример:

documents:       data:

eBgdTRE123       id:'eBgdTRE123'
                 name:'Jhon Doe'
                 job:'Programmer'     

я хочу, чтобы в базе данных была эта структура, теперь у меня есть две идеи для достижения этой цели

1: использовать облачную функцию и иметь onCreate слушателя, и каждый раз появляется новый документ, захватывающий документ и устанавливающий идентификатор и обновите его, вот как я это делаю

exports.addDocIdToField = 

functions.firestore.document('collectionname/{docID}').onCreate((snap,context) => {
    const id = context.params.docID;
    return admin.firestore().collection('collectionname')
        .doc(id).set({ id: snap.id }, { merge: true })
        .then(() => {
            return null;
        })
        .catch((error) => {
            return null;
        });
})

2: использовать вышеуказанный метод при создании документа. добавьте новый документ, как только этот документ будет добавлен, получите новый добавленный документ и обновите его id

, оба они работают, но мой вопрос - могу ли я положиться на этот вид операции? Я имею в виду, если id каким-либо образом undefined, это может вызвать дальнейшую ошибку в приложении.

или если есть другие способы добиться этого?

1 Ответ

1 голос
/ 20 января 2020

Существует более простой способ добиться этого, используя метод doc(), как показано ниже (здесь с JavaScript SDK)

var newDocRef = db.collection('collectionname').doc();
newDocRef.set({
                 name:'Jhon Doe',
                 job:'Programmer',
                 id: newDocRef.id
          })

Как объяснено в c:

(метод doc()) получает DocumentReference для документа в коллекции по указанному пути. Если путь не указан , для возвращенного DocumentReference будет использоваться автоматически сгенерированный уникальный идентификатор.


Подобные методы вы найдете в других клиентских SDK, здесь для Android и здесь для iOS.

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