我尝试返回所有满足document.field.value > document.array.length
的文档。我尝试使用ExpressJS中的MongoClient来完成此操作,但无法在SO上找到答案。
这是我尝试过的,但这给出了一个空列表。
const db = ref()
const c = db.collection(t)
const docs = await c.find({
"stop.time":{$gt: new Date().toISOString()},
"stop.expect": {$gt: { $size: "stop.riders"}}
})
console.log(docs)
还尝试更换
"stop.expect": {$gt: { $size: "stop.riders"}}
下面的代码无法编译
$expr: {$lt: [{$size: "stop.riders"}, "stop.expect"]}
样本数据:
{ "stop": { "expect":3, "riders": ["asd", "erw", "wer"] } },
{ "stop": { "expect":4, "riders": ["asq", "frw", "wbr"] } }
2条答案
按热度按时间2mbi3lxu1#
要使用涉及计算的复杂查询筛选查询,需要使用
$expr
运算符,它允许使用聚合运算符。接下来,在
$expr
运算符中,要引用字段,需要添加前缀$
。Demo @ Mongo Playground
lrpiutwd2#
要比较文档中的字段,必须使用$expr,如下所示:
我省略了
stop.time
条件,因为它不在您的示例数据中,并且不清楚它是什么类型的字段,如果它确实在您的数据中(它是Date还是String将非常重要)。请注意,这种查询不能使用索引。