Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB$in in in$cond_Mongodb_Aggregation Framework - Fatal编程技术网

MongoDB$in in in$cond

MongoDB$in in in$cond,mongodb,aggregation-framework,Mongodb,Aggregation Framework,在MongoDB中,我试图对ITEN进行分组和计数,这让我的大脑消耗殆尽。有很多帖子,但没有一个是我需要的 这是一个基于以下内容的示例: 我需要根据$in和$match一起分组,并有多个结果 一个工作结果 db.VIEW_HISTORICO.aggregate([ { $match: { PartnerId: "2021", DT_RECEBIDO: {$gte: "2019-03-10 00:00:00", $lte: "2019-03-12 23:59:59"}, "CD_EV

在MongoDB中,我试图对ITEN进行分组和计数,这让我的大脑消耗殆尽。有很多帖子,但没有一个是我需要的

这是一个基于以下内容的示例:

我需要根据$in和$match一起分组,并有多个结果

一个工作结果

db.VIEW_HISTORICO.aggregate([

{ 
    $match: { PartnerId: "2021", DT_RECEBIDO: {$gte: "2019-03-10 00:00:00", $lte: "2019-03-12 23:59:59"}, "CD_EVENTO": { $in: ["K127", "9027"] }, }   
},

{
    $count : "Controles"
}

])
使用MSSQL,我通过以下方式获得了最佳性能:

SELECT 
            SUM(CASE WHEN CD_EVENTO = 'K102' THEN 1 ELSE 0 END) AS Interfone,
            SUM(CASE WHEN CD_EVENTO IN('9015', '9016', '9017', '9018', '9019', '9020', '9021', '9022', '9023', '9024', '9025', '9026', 'K154', 'K155') THEN 1 ELSE 0 END) AS Tag,
            SUM(CASE WHEN CD_EVENTO IN('9027', '9028', '9029', '9030', '9031', '9032', '9033', '9034', 'K127') THEN 1 ELSE 0 END) AS Controle,
            SUM(CASE WHEN CD_EVENTO IN('K203', 'K204') THEN 1 ELSE 0 END) AS QrCode,
            SUM(CASE WHEN CD_EVENTO IN('K183', 'K184') THEN 1 ELSE 0 END) AS Convite
            FROM VIEW_ANALYTICS
            WHERE DT_RECEBIDO BETWEEN GETDATE()-30 AND GETDATE()
我努力尝试,但我无法将我的MSSQL翻译成MongoDB。我的问题

db.VIEW_HISTORICO.aggregate([

{ 
    $match: { PartnerId: "2021", DT_RECEBIDO: {$gte: "2019-03-10 00:00:00", $lte: "2019-03-12 23:59:59"}}   
},

{ 
    $group: { _id: null,

            Controle1: { $sum: {$cond: [{ "CD_EVENTO": { $in: ["K127", "9027"] }}, 1, 0]}},


            Controle2: { $sum: {$cond: [{ "CD_EVENTO": { $in: ["K154", "K155"] }}, 1, 0]}}

            }
}

])
运算符的语法与此处尝试执行的有点不同。它包含两个元素的数组:第一个元素表示对字段的引用(必须以美元符号开头),第二个元素是值数组,因此您的
$group
阶段应该如下所示:

db.VIEW_HISTORICO.aggregate([
    { 
        $group: { _id: null,
                Controle1: { $sum: {$cond: [{ $in: ["$CD_EVENTO", ["K127", "9027"]]}, 1, 0]}},
                Controle2: { $sum: {$cond: [{ $in: ["$CD_EVENTO", ["K154", "K155"]]}, 1, 0]}},
                }
    }
])
db.VIEW_HISTORICO.aggregate([
    { 
        $group: { _id: null,
                Controle1: { $sum: {$cond: [{ $in: ["$CD_EVENTO", ["K127", "9027"]]}, 1, 0]}},
                Controle2: { $sum: {$cond: [{ $in: ["$CD_EVENTO", ["K154", "K155"]]}, 1, 0]}},
                }
    }
])