现在有两个问题:
1、使用AggregateCommand.filter时,如图2中查询的条件只满足一条数据里的一个数组里的值,而图1中返回的是两条(如图1中list的长度),这样相当于数据库有几条数据,返回的list里就会有多少条,而且如图1中 list [0] . lotteryList 里是没有数据(因为没有匹配),既然没有匹配的为什么还要返回这样的空数据呢?
问题 2、对于问题1中的情况可不可以在使用AggregateCommand.filter前先根据openid将数据范围缩小到一条数据里,再查出该条数据里符合要求的数组的子集,我试过,好像不能和where同时用,而像问题1那样查出来许多空的再去遍历剔除,这样的销号太大。
总结起来就是一个,我想获取某条数据里数组中符合条件的子集。
好好看看project和filter的文档,尤其是project的意思
db.collection('xxxx').aggregate()
.match({
'lotteryList.lotteryid':22...23
'lotteryList.used': false
})
.project({
lotteryList: 1
})
.end()
db.collection('vouchersList').aggregate()
.match({
'lotteryList.lotteryid': event.lotteryid,
'lotteryList.used': false
})
.project({
openid: true,
lotteryList: $.filter({
input: '$lotteryList',
as: 'item',
cond: $.and([$.eq(['$$item.lotteryid', event.lotteryid]), $.eq(['$$item.used', false])])
})
})
.end()