我的数据有两个重要的字段“成功”和“错误”。我想检索所有具有。但是,如果用户两者都有,则应该忽略“error”,而只看到“success”对象。我有点难以用语言表达。请不要犹豫,要求澄清问题。
聚合从这个匹配项开始
{
"$and" : [
{
"time" : {
"$gte" : ISODate("2023-04-23T00:00:00.000+0000")
}
},
{
"time" : {
"$lte" : ISODate("2023-04-25T00:00:00.000+0000")
}
},
{
"$or" : [
{
"type" : "success"
},
{
"type" : "error"
}
]
}
]
}
接下来是小组赛阶段
{
"_id": {
"name": "$data.agent.name",
"id": "$data.agent.id",
"time": {"$dateToString": {"format": "%m-%d-%Y", "date": "$time"}},
"type": "$type",
}
}
以下是结果摘录
{
"_id" : {
"name" : "Samus Aran",
"id" : "ID123456",
"time" : "04-24-2023",
"type" : "success"
}
}
{
"_id" : {
"name" : "Samus Aran",
"id" : "ID123456",
"time" : "04-24-2023",
"type" : "error"
}
}
{
"_id" : {
"name" : "John Doe",
"id" : "ID654321",
"time" : "04-24-2023",
"type" : "error"
}
}
{
"_id" : {
"name" : "Jean Moulin",
"id" : "ID456123",
"time" : "04-24-2023",
"type" : "success"
}
}
我想如果一个ID号同时有成功类型和错误类型,在同一天,错误应该被忽略。使用上面的一组结果作为示例,我们应该得到以下结果:
{
"_id" : {
"name" : "Samus Aran",
"id" : "ID123456",
"time" : "04-24-2023",
"type" : "success"
}
}
{
"_id" : {
"name" : "John Doe",
"id" : "ID654321",
"time" : "04-24-2023",
"type" : "error"
}
}
{
"_id" : {
"name" : "Jean Moulin",
"id" : "ID456123",
"time" : "04-24-2023",
"type" : "success"
}
}
为了清楚起见,如果结果集的成员同时具有这两种类型,则只应返回success类型。注意:一个ID每天可能有多个成功和错误类型。我只需要知道一个ID是否有一个错误类型,当天没有成功类型或(至少1)只有成功类型。请注意,这肯定会在任何情况下驱动查询,但这个查询随后将被添加到go应用程序中。
1条答案
按热度按时间qgelzfjb1#
一个选项是将
$group
替换为:1.排序使
success
在error
之前1.将类型组合到一个集合中
1.只保留第一种类型
了解它在playground example上的工作原理