在 `$elemMatch` 中引用子文档的另一个字段
Referencing another field of subdocument in `$elemMatch`
我正在尝试在 $match
聚合阶段执行 $elemMatch
,我想在该阶段查找子文档数组 (commitments
) 中是否有文档 属性 tracksThisWeek
小于它的 frequency
属性,但我不确定如何引用相关子文档的另一个字段,我想出了:
{
$match: {
commitments: {
$elemMatch: {
tracksThisWeek: {
$lt: '$frequency',
},
},
},
},
},
我在集合中有一个文档应该从这个聚合中返回但不是,任何帮助都将不胜感激:)
这是做不到的,你不能引用查询语言中的任何字段,你可以做的是使用 $expr
和聚合运算符,如下所示:
db.collection.aggregate([
{
$match: {
$expr: {
$gt: [
{
$size: {
$filter: {
input: "$commitments",
cond: {
$lt: [
"$$this.tracksThisWeek",
"$$this.frequency"
]
}
}
}
},
0
]
}
}
}
])
我正在尝试在 $match
聚合阶段执行 $elemMatch
,我想在该阶段查找子文档数组 (commitments
) 中是否有文档 属性 tracksThisWeek
小于它的 frequency
属性,但我不确定如何引用相关子文档的另一个字段,我想出了:
{
$match: {
commitments: {
$elemMatch: {
tracksThisWeek: {
$lt: '$frequency',
},
},
},
},
},
我在集合中有一个文档应该从这个聚合中返回但不是,任何帮助都将不胜感激:)
这是做不到的,你不能引用查询语言中的任何字段,你可以做的是使用 $expr
和聚合运算符,如下所示:
db.collection.aggregate([
{
$match: {
$expr: {
$gt: [
{
$size: {
$filter: {
input: "$commitments",
cond: {
$lt: [
"$$this.tracksThisWeek",
"$$this.frequency"
]
}
}
}
},
0
]
}
}
}
])