我稍作休息,可以看到我的if语句被正确命中,但是返回数据没有考虑其他where子句。基本上,如果这是开始月份,我不希望它有一个起点,只返回不完整的月份。之后,我希望它一次只退回一个月。
我还验证了我的日期值正确。
let endDate = moment(date).add(1, 'M').toDate()
var search = fb.ledgersCollection.where('accountId', '==', this.account.id)
.where('completed', '==', false)
.where('date', '<', endDate)
if(date != this.startDate) {
search.where('date', '>', date)
}
search.orderBy('date', 'asc').orderBy('deposit', 'desc').orderBy('name', 'asc').get().then(docs => {
docs.forEach(doc => {
let ledger = doc.data()
ledger.date = new Date(1000* doc.data().date.seconds)
ledger.id = doc.id
this.currentBalance = parseFloat(Number(this.currentBalance) + Number(ledger.amount)).toFixed(2)
ledger.balance = this.currentBalance
this.ledgerItems.push(ledger)
})
})
答案 0 :(得分:3)
Firestore中的查询对象是不可变的,这意味着它们在创建后无法修改。您需要做的是在先前查询的基础上建立一个新查询。例如:
var search = fb.ledgersCollection.where('accountId', '==', this.account.id)
.where('completed', '==', false)
.where('date', '<', endDate)
if(date != this.startDate) {
// build a new query based off the original query
search = search.where('date', '>', date)
}
请注意,我正在将search
重新分配给基于原始搜索的新查询对象。这项新搜索将同时应用所有过滤器。