我正在尝试在聚合上使用$ filter。我需要过滤一个名为“extras”的数组,该数组至少与他的“季节”中的一个相交,并给出“日期”。
这是一个例子:
var from = new Date(2016, 0, 1);
var to = new Date(2016, 0, 5)
var projection = {
name: 1,
units: 1,
capacity: 1,
availabilitySeasons: { // This works
$filter: {
input: '$availabilitySeasons',
as: 'avSeason',
cond: {
$and: [{
$lte: ['$$avSeason.from', to]
}, {
$gte: ['$$avSeason.to', from]
}]
}
}
},
rate: 1,
features: 1,
extras: {
$filter: { // $elemMatch is no valid
input: '$extras',
as: 'extra',
cond: {
$elemMatch: ['$$extra.seasons', {
from: {
$lte: from
},
to: {
$gte: to
}
}]
}
}
}
};
在这种情况下可以使用$ filter吗?我是否必须匆匆通过$ unwind / $ group hell?
答案 0 :(得分:0)
是的,你可以做到。 对于以下示例,请在 $和条件中使用 $ lte 和 $ gte 的条件。
$project: {
items: {
$filter: {
input: "$items",
as: "item",
cond: {
$and: [
$lt: [ "$$item.price", 100 ],
$gt: [ "$$item.price", 50 ]
] }
}
}
}