Я хотел бы найти документ в коллекции и добавить элементы во вложенную коллекцию (которая может еще не существовать):
projects (collection)
project (doc)
cluster (collection) // might not exist
node1 (doc) // might not exist
statTypeA (collection) // might not exist
Я надеялся на что-то вроде этого:
// Know the doc:
db.ref(`projects/${projectId}/cluster/node1/${statType}`).add()
// Or filter and ref:
db.collection('projects').where(..).limit(1).ref(`cluster/node1/${statType}`).add()
В итоге я решил, что это так, но уродливо, многословно и медленно, так как сначала нужно вернуться с несколькими операциями чтения.Правильно ли я это делаю?
const projectRefs = await db.collection('projects')
.where('licenseKey', '==', licenseKey)
.limit(1)
.get();
if (!projectRefs.docs) {
// handle 404
}
const projectRef = projectRefs.docs[0].ref;
const cluster = await projectRef.collection('cluster')
.doc('node1').get();
await cluster.ref.collection(statType).add({ something: 'hi' });
Редактировать:
То, как я в итоге справился с этим лучше, - это сочетание уплощения с другими коллекциями, а такжеиспользуя массивы для статистики.Чувствует себя намного лучше:
// projects
{
projectId1
}
// instances (to-many-relationship) (filter based on projectId)
{
projectId
statTypeA: []
statTypeB: []
}