我有一个收藏:
@Prop({ type: Number, required: true, default: 0 })
have:number;
@Prop({ type: Boolean, required: false, default: null })
unstable?: boolean;
@Prop({ type: Number, required: false, default: null })
max?: number;
字符串
我需要根据这个原则过滤选择。如果unstable = true,则不选择,如果等于false或null,则忽略过滤器第二个have条件必须小于max,但仅当max!== null否则忽略此过滤器
此外,这两个条件都必须通过,即如果记录不符合某些条件,则我们不将其添加到选择中
第一个条件一切都很清楚,很容易检查是否不稳定!== true,则忽略但在第二种情况下,我通常无法设计滤波器。我觉得我做的一切都是对的,但是不管用。
总的来说,这是我想出来的
{
$and:[
{
unstable: {
$ne: true
},
},
{
have: {
$lte: {
cond: { // tried to write $cond as well, doesn't swear at anything, but there is no result
if: {
max: { $eq: null },
},
then: Infinity,
else: '$max', // tried to use Infinity here too, silence too
},
},
},
},
],
}
型
我的逻辑是这样的:
have <= (max === null ? Infinity : max)
型
我也测试了这个选项,它的作品
have: {
$lte: Infinity
}
型
p.s.数据示例
{
id: 1,
max: 10,
have: 1,
unstable: null,
},
{
id: 2,
max: 10,
have: 10,
unstable: null,
},
{
id: 3,
max: null,
have: 1,
unstable: null,
},
{
id: 4,
max: null,
have: 1,
unstable: true,
},
型
预期输出ID:1和3
id 2不包含,因为have >== max id 4不包含,因为unstable = true
p.s.s. https://mongoplayground.net/p/MriDNX6U7El
2条答案
按热度按时间uyto3xhc1#
你可以试试这个:
字符串
或者稍微短一点:
型
也许MaxKey在您的客户端中不可用,那么您可以使用
型
因为根据升序/降序排序,布尔值总是大于任何数值。
不要将比较查询运算符误认为是比较表达式运算符。比较查询运算符直接用于
find
,比较表达式运算符用于聚合管道和$expr
文档。ecbunoof2#
您应该使用
$project
来比较相同的字段document
。试试这个:字符串
链接mongoPlayground在here