【发布时间】:2018-09-01 01:59:25
【问题描述】:
在聚合管道中,我试图根据该对象中字段的值过滤对象数组的某些元素。
假设我有这个条目:
{
"_id": "5b8911d346d19645f8a66bf4",
"title": "test task",
"creation_date": "2018-08-31T10:00:51.598Z",
"logs": [
{
"_id": "5b89126c46d19645f8a66bfb",
"content": "Running"
},
{
"_id": "5b89128646d19645f8a66bfd",
"content": "Stopping"
},
{
"_id": "5b89128646d19645f8a66bfd",
"content": "Stopped"
}
]
}
我的目标是只过滤内容中包含stop 字的日志:
{
"_id": "5b8911d346d19645f8a66bf4",
"title": "test task",
"creation_date": "2018-08-31T10:00:51.598Z",
"logs": [
{
"_id": "5b89128646d19645f8a66bfd",
"content": "Stopping"
},
{
"_id": "5b89128646d19645f8a66bfd",
"content": "Stopped"
}
]
}
我尝试使用$redact来消除所有不包含stop字样的日志:
$redact: {
$cond: {
if: { $match: { "logs.content": { $regex: "stop", $options: 'i' }}},
then: "$$KEEP",
else: "$$PRUNE"
}
}
但我不断收到错误消息:
Unrecognized expression '$match'
【问题讨论】:
-
$regex对聚合表达式的支持将在 4.1 版本之前提供。你可以看看jira issue。您可以使用stackoverflow.com/questions/43016813/…提供的答案。
标签: mongodb aggregation-framework