Я нашел ответ, который искал.Проблема с созданием документа как части пакета заключается в том, что вам нужно сгенерировать свой собственный ключ - либо используя тот, которым вы управляете, либо получая его из Firestore.Оглядываясь назад, это очевидно, поскольку пакет должен работать с данным документом - меня отвлек тот факт, что .add () при обычной ссылке добавит ваш новый документ и даст ему Id - я искал способсделать это с помощью пакета.
Вот код, который я в конечном итоге использовал
@Injectable({
providedIn: 'root'
})
export class ProjectService {
// AuthService is implied but not shown as part of this example
constructor(private afs: AngularFirestore, private auth:AuthService) { }
// Update Project and write an event log to the projects ActivityLog
// as part of the same write
UpdateProject(projectName: string, data:any) : Promise<void>
{
// Get a batch reference
const batch = this.afs.firestore.batch();
// Reference to the Project document that needs to be updated
const ref = this.afs.collection('Projects').doc(projectName);
// Get a unique Firestore ID for the ActivityLog document
const newLogId = this.afs.createId();
// Reference to the ActivityLog doc using the ref and ID created above
const logref = ref.collection('ActivityLog').doc(newLogId);
batch.update(ref.ref, data);
// Create the new entry
batch.set(logref.ref, {
Created: firestore.FieldValue.serverTimestamp(),
User: this.auth.UserName,
Action: 'Update',
Data: JSON.stringify(data)
});
return batch.commit();
}
}
В моем компоненте
onUpdate(data:any) {
this.projectSvc.UpdateProject(this.projectName, data)
.then(() => alert('Update successful'));
}
Бит ключа генерировал Id ииспользуя это в ссылке на новый документ ActivityLog (в данном случае).
Боковая панель: Это могло бы быть сделано как функция облака - причина, по которой мы даже смотрим на это, заключается в том, что нам нужно знатьПользователь, который внес изменение и на основании проведенного исследования вы не можете получить идентификатор пользователя, который вызвал изменение в Firestore (вы можете в Realtime, я полагаю).