模式
{
useLimit: Number,
uses: [{...}]
}
我想查询此集合仅匹配使用长度小于useLimit或useLimit为-1(表示无限)的文档
答案 0 :(得分:0)
执行此操作的一种方法是在$where
查询中使用find()
运算符:
// pass a function to the `$where` operator, to pick records
// if they meet the desired condition.
db.collection.find( {
$where : function() {
return (this.uses.length < this.useLimit || this.useLimit == -1);
}
})
或使用aggregation
管道
isValid
,其值已解析
到true
或false
。 true
,如果符合条件,则为false
。isValid
匹配
属性值为true
。$project
运算符投影除了以外的字段
isValid
。如下,
db.collection.aggregate( [ {
$project : {
"uses" : 1,
"useLimit" : 1,
"isValid" : {
$cond : [ {
$or : [ {
$gte : [ "$useLimit", {
$size : "$uses"
} ]
}, {
$eq : [ "$useLimit", -1 ]
} ]
}, true, false ]
}
}
}, {
$match : {
"isValid" : true
}
}, {
$project : {
"uses" : 1,
"useLimit" : 1
}
} ])