Итак, я пытаюсь добавить документ в коллекцию, если мой запрос не дает результатов. Я разместил запрос ниже, но нет операторов для проверки длины или размера полученного запроса. Как я могу это сделать?
Вот запрос:
this.monthCollection = this.afs.collection('users').doc(this.auth.getUserId()).collection('months', ref => {
return ref.where('endTimestamp', '>=', moment().unix()).limit(1);
});
Если этот запрос не возвращает никаких документов, мне нужно запустить createNewMonth();
, чтобы добавить в коллекцию месяцев. Вот метод createNewMonth`
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
}
return this.monthCollection.add(newMonth);
}
Есть ли способ сделать это внутри запроса, если я использую .then()
или он должен быть вне запроса?
РЕДАКТИРОВАТЬ: Таким образом, я нашел способ создать один, но он создает 2 каждый раз вместо одного. Вот код.
this.currentMonth = this.monthCollection.snapshotChanges().map(snapshot => {
if (snapshot.length <= 0) {
this.createNewMonth(); <---- here is what I added, it creates 2
}
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;
});
});