Обновление после вашего последнего обновления о вашей структуре данных ...:
Делай, как я изначально советовал:
totalExpenseByType(expense_type){
db.collection('expenses')
.where("created_month", "==", moment().format('MM-YYYY'))
.where("expense_type", "==", expense_type)
.get()
.....
Тогда у вас есть другая проблема. Метод get()
является асинхронным и возвращает обещание, см. здесь . Делая
totalExpenseByType(){
db.collection('expenses').where("created_month", "==", moment().format('MM-YYYY'))
.get()
.then(snapshot => {
var totalExpensesOfThisMonth = 0;
snapshot.forEach(doc => {
totalExpensesOfThisMonth += Number(doc.data().expense_amount)
})
this.expenses_of_this_month = totalExpensesOfThisMonth;
})
return this.expenses_of_this_month;
}
вы возвращаете значение this.expenses_of_this_month
до разрешения обещания, и поэтому оно не возвращает правильное значение.
Кроме того, я думаю, что вы неправильно понимаете систему реактивности Vue: в вашем коде вы (если я правильно предполагаю, что this
ваш экземпляр Vue) присваивает значение totalExpensesOfThisMonth
свойству expenses_of_this_month
объект data
вашего компонента И возвращающий в вашей функции totalExpenseByType(expense_type)
то же самое свойство data
объекта (неправильно, см. выше).
Обновление после вашего последнего комментария ниже: это строка со значением "расход_тип:" Расходы сотрудника "
Поскольку вы упомянули, что это строка со значением "расход_тип:" Расходы сотрудника ", вы должны сделать следующее:
db.collection("test").where("expense_type", "==", '"expense_type:"Employee Expense"').get().then()
или, если внешние двойные кавычки должны быть удалены:
db.collection("test").where("expense_type", "==", 'expense_type:"Employee Expense').get().then()
Обновление после вашего обновления о вашей структуре данных:
Если я правильно понимаю, вы храните expense_type
как объект.
В этом случае ваш запрос должен выглядеть следующим образом:
db.collection('expenses').where("expense_type.expense_type", "==", "Employee Expense").get().then()
Предыдущий ответ, от которого отказываются
Я думаю, что это должно быть следующим:
totalExpenseByType(expense_type){
db.collection('expenses')
.where("created_month", "==", moment().format('MM-YYYY'))
.where("expense_type", "==", expense_type)
.get()
.....
, если * expense_type
поле типа Array. В этом случае вам следует использовать синтаксис «членство в массиве», см. https://firebase.google.com/docs/firestore/query-data/queries#array_membership