【发布时间】:2021-01-12 04:08:53
【问题描述】:
我有一个文档集合“EvaluationGroups”,其中每个评估组对象都有一个Evaluation列表。 每个评估对象都有一个 Detail 对象列表。 每个 Detail 都包含一个 Label 对象列表。 Label 是一个具有名为“LabelId”的属性和名为“Value”的属性的对象。 (细节定义了标签的组合并显示了一些其他数据,每个标签组合代表一种不同的评估类型)。
示例文档:
我想要做的是过滤EvaluationGroups内列表中的所有评估,这些评估具有任何标签的详细信息,该标签具有相同的LabelId和LabelValue(字符串)给定的标签。 所以,总而言之,我想按标签过滤评估。
如何通过 mongodb 查询,使用聚合和匹配阶段来实现这一点?
我试过了:
{ "$match" :
{
"$expr" : {
$anyElementTrue: {
$and: [
{ $eq: [ "$Evaluations.Details.Labels.LabelId", "5fe34b13f0031e1078e08b5c" ] },
{ $eq: [ "$Evaluations.Details.Labels.Value", "CREDIT" ] }
]
}
} }}
但我得到 0 个结果,因为我知道我确实有给出该标签的评估(带有该 ID 和值)..
任何帮助将不胜感激!
【问题讨论】:
-
向我们展示一些示例文档
-
是的,显示一些文件。您是否尝试过使用 $unwind 运算符?你应该得到更多的文件,但这样更容易操作。文档:docs.mongodb.com/manual/reference/operator/aggregation/unwind
-
@Gibbs,我添加了文档的示例图片!
-
@Pilybius 我编辑添加了文档的示例图像
-
Labels 数组内部有多重匹配的场景吗?
标签: arrays mongodb mongodb-query aggregation-framework any