我试图在一个$elemMatch聚合阶段执行一个$match,在这个阶段,我希望在一个子文档数组(commitments)中找到一个文档,该数组的属性tracksThisWeek小于其frequency属性,但我不知道如何引用该子文档的另一个字段,我想出了如下结论:
{
$match: {
commitments: {
$elemMatch: {
tracksThisWeek: {
$lt: '$frequency',
},
},
},
},
},我在集合中有一个文档,它应该从这个聚合返回,但不是,任何帮助都很感激:)
发布于 2022-04-10 17:19:02
这是不可能的,您不能引用查询语言中的任何字段,您可以做的是在聚合运算符中使用$expr,如下所示:
db.collection.aggregate([
{
$match: {
$expr: {
$gt: [
{
$size: {
$filter: {
input: "$commitments",
cond: {
$lt: [
"$$this.tracksThisWeek",
"$$this.frequency"
]
}
}
}
},
0
]
}
}
}
])https://stackoverflow.com/questions/71817399
复制相似问题