我在mongodb中存储了类似的文档:
{
"_id" : ObjectId("----"),
"status" : "pending",
"user" : "huSWFekrPkw_xwtqDueAm4j4tHiuPJf3",
"type" : "inMemory",
"question" : "Hello, How are you?",
"intent" : "Greeting",
"createdAt" : ISODate("2018-07-24T06:33:59.399Z"),
"updatedAt" : ISODate("2018-07-24T06:33:59.399Z"),
}
{
"_id" : ObjectId("----"),
"status" : "trained",
"user" : "huSWFekrPkw_xwtqDueAm4j4tHiuPJf3",
"type" : "inMemory",
"question" : "Holla",
"intent" : "Greeting",
"createdAt" : ISODate("2018-07-25T06:33:59.399Z"),
"updatedAt" : ISODate("2018-07-25T06:33:59.399Z"),
}
{
"_id" : ObjectId("----"),
"status" : "trained",
"user" : "huSWFekrPkw_xwtqDueAm4j4tHiuPJf3",
"type" : "inMemory",
"question" : "want to talk with agent?",
"intent" : "Agent",
"createdAt" : ISODate("2018-07-26T06:33:59.399Z"),
"updatedAt" : ISODate("2018-07-26T06:33:59.399Z"),
}
我想要的聚合管道:
intent
上的$组status
上的$组
1.在这两组结果的基础上,我想过滤出有多少是未决的,并为每个特定的Intent进行了训练。与Greeting
intent一样,我有2个待处理文档和1个已训练文档。
1.后来我还想,有多少文档的Greeting
意图在今天,过去7天或上个月.
所以最终的文档看起来像这样:
{
"intent" : "Greeting",
"status_pending" : 1,
"status_trained" : 2,
"last_day" : 1,
"last_seven_day" : 3,
"last_month" : 7
}
{
"intent" : "Agent",
"status_pending" : 1,
"status_trained" : 1,
"last_day" : 1,
"last_seven_day" : 2,
"last_month" : 3
}
3条答案
按热度按时间fdbelqdn1#
您可以为每个
intent
使用$group和$push
所有日期和状态。然后你可以使用$filter和$size来计算每个过滤器有多少项:mnemlml82#
你也可以试试这个
vyu0f0g13#
为了在单个管道中执行$groups,一个可能的解决方案是使用
$facet
。它更简单和更快。