Итак, я пытаюсь добавить документ, если запрос возвращает 0 документов. И я получил его, чтобы создать новый документ, но по какой-то причине он создает 2? Есть ли способ ограничить его создание только одного?
Вот метод
this.currentMonth = this.monthCollection.snapshotChanges().map(snapshot => {
if (snapshot.length <= 0) {
this.createNewMonth(); <---- THIS GETS CALLED TWICE
}
return snapshot.map(doc => {
const data = doc.payload.doc.data();
data.id = doc.payload.doc.id;
this.currentMonthId = doc.payload.doc.id;
this.currentMonthTotalSpent = doc.payload.doc.data().totalSpent;
this.expenseCollection = this.monthCollection.doc(doc.payload.doc.id).collection('expenses');
this.expenses = this.expenseCollection.snapshotChanges().map(snapshot => {
return snapshot.map(doc => {
const data = doc.payload.doc.data();
data.id = doc.payload.doc.id;
return data;
});
});
return data;
});
});
РЕДАКТИРОВАТЬ: Итак, немного больше деталей, когда приложение открывается, мне нужно проверить Firestore для объекта месяца, который имеет конечную метку времени, которая больше, чем текущее время. Если это не так (что означает новый месяц), мне нужно создать новый месяц. Я поместил метод, который создает новый месяц ниже для справки. У меня проблема в том, что созданы 2 документа, и мне нужен только один.
createNewMonth() {
let date = new Date(), y = date.getFullYear(), m = date.getMonth();
let firstDay = new Date(y, m, 1);
let lastDay = new Date(y, m + 1, 0);
let newMonth = {
categories: [],
endTimestamp: moment(lastDay).unix(),
name: this.getMonthNameFromTimestamp(moment().unix()),
startTimestamp: moment(firstDay).unix(),
totalSpent: 0
}
this.monthCollection.add(newMonth);
}
РЕДАКТИРОВАТЬ 2: просто для справки здесь monthCollection
this.monthCollection = this.afs.collection('users').doc(this.auth.getUserId()).collection('months', ref => {
return ref.where('endTimestamp', '>=', moment().unix()).limit(1);
});
РЕДАКТИРОВАТЬ 3: Итак, я переместил извлечение из снимка в другую проверку, но он все еще создает 2 документа. То, что вы видите ниже, находится над другим кодом.
this.afs.collection('users').doc(this.auth.afAuth.auth.currentUser.uid).collection('months').ref.where('endTimestamp', '>=', moment().unix()).get().then((result) => {
if (result.empty || result.size <= 0) {
this.createNewMonth();
}
});