在mongo聚合管道的投影阶段检查元素是否出现在数组中

艾丹·埃文(Aidan Ewen)

我有一些mongo文件,例如-

{
    "_id" : "c959e4d6-961d-4043-ade6-2f93aa055e11",
    "events" : [
        "clickOut"
        "showHoverAd",
        "closeHoverAd"
    ]
}
{ 
    "_id" : "d0dcb2be-f8bc-45cd-8337-d89a16063b08", 
    "events" : [ 
        "zoom",
        "pan"
    ] 
}
{
    "_id" : "9179b26e-e45c-48ab-93f6-e73b8ebe559b",
    "events" : [
        "clickOut"
    ]
}
{
    "_id" : "db0b82ad-7a33-4ce8-9117-f6ecf041d0d9",
    "events" : [
        "adjustStars",
        "adjustPrice",
        "closeHoverAd",
        "showHoverAd"
    ]
}

我正在尝试在聚合管道中使用projection阶段来识别特定字符串是否出现在事件字段中。

db.events.aggreate([
    {$project: {
        session: '$_id',
        clickedOut: {
            $cond: [{$elemMatch: {'$events':'clickOut'}},true,false]
        }
    }}
])

我遇到错误- exception: invalid operator '$elemMatch'

我希望输出文档看起来像-

{
    "session" : "c959e4d6-961d-4043-ade6-2f93aa055e11",
    "clickedOut" : false
}
{ 
    "session" : "d0dcb2be-f8bc-45cd-8337-d89a16063b08", 
    "clickedOut" : true
}

但是我似乎找不到解决方法。我尝试使用$in$all或简单地

$cond: {'$events':'clickOut'}

但是我什么都没得到。

克列丹

使用以下聚合:

db.events.aggregate([
    {
        "$unwind": "$events"
    },
    {
        "$project": {
            "_id": 0,
            "session": "$_id",
            "clickedOut": {
                "$cond": [ { "$eq": [ "$events", "clickOut" ] }, 1, 0 ]
            }
        }
    },
    {
        "$group": {
            "_id": "$session",
            "count": {
                "$sum": "$clickedOut"
            }
        }
    },
    {
        "$project": {
            "_id": 0,
            "session": "$_id",
            "clickedOut": {
                "$cond": [ { "$eq": [ "$count", 1 ] }, true, false ]
            }            
        }
    },
]);

输出

/* 1 */
{
    "result" : [ 
        {
            "session" : "db0b82ad-7a33-4ce8-9117-f6ecf041d0d9",
            "clickedOut" : false
        }, 
        {
            "session" : "9179b26e-e45c-48ab-93f6-e73b8ebe559b",
            "clickedOut" : true
        }, 
        {
            "session" : "d0dcb2be-f8bc-45cd-8337-d89a16063b08",
            "clickedOut" : false
        }, 
        {
            "session" : "c959e4d6-961d-4043-ade6-2f93aa055e11",
            "clickedOut" : true
        }
    ],
    "ok" : 1
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

检查数组的每个元素是否以bash出现在字符串中,忽略某些字符和顺序

来自分类Dev

Braintree订阅对象中的最新交易是否出现在数组的顶部或底部?

来自分类Dev

查看一组值是否出现在数组中的有效方法?

来自分类Dev

PHP 检查数组值是否出现在所有多维数组中

来自分类Dev

如何检查元素是否出现在while循环中

来自分类Dev

Ruby-Nils出现在数组中

来自分类Dev

检查元音是否出现在字符串中

来自分类Dev

提交表单后检查元素是否出现在页面上以检查用户是否已登录

来自分类Dev

检查元素是否在数组中

来自分类Dev

Mongo在数组元素上的聚合

来自分类Dev

在Java中以递归方式对数组进行排序,偶数出现在数组前面。

来自分类Dev

如何使属性的元素不出现在数据合同生成的XML中

来自分类Dev

使用反应测试库检查文本是否出现在元素内

来自分类Dev

使Polymer元素出现在JSBin中

来自分类Dev

测试某些变量(不同版本)是否出现在数据中

来自分类Dev

为什么长度不作为键出现在数组对象中?

来自分类Dev

如何找到一组特定值出现在数组中的次数?

来自分类Dev

JS / jQuery计算出现在数组中的对象的消失率

来自分类Dev

用Java方式对列表进行排序,id出现在数组中

来自分类Dev

查找最大数字出现在数组中的次数

来自分类Dev

Java:最大值出现在数组中的次数

来自分类Dev

如何计算一个数字出现在数组中的次数

来自分类Dev

如何检查数组中的id是否出现在另一个数组中,然后将其推送到新数组

来自分类Dev

如何检查当前主机是否出现在 ansible 中的变量列表中?

来自分类Dev

为什么tbody标签出现在检查元素中?

来自分类Dev

如何检查熊猫元素是否在数组中的列中

来自分类Dev

如何检查一个单词是否出现在另一个单词(关键字)的ID(元素列表中的位置)中

来自分类Dev

检查第一个参数中的所有元素是否出现在第二个参数中

来自分类Dev

检查元素何时出现在视口中-> addClass

Related 相关文章

  1. 1

    检查数组的每个元素是否以bash出现在字符串中,忽略某些字符和顺序

  2. 2

    Braintree订阅对象中的最新交易是否出现在数组的顶部或底部?

  3. 3

    查看一组值是否出现在数组中的有效方法?

  4. 4

    PHP 检查数组值是否出现在所有多维数组中

  5. 5

    如何检查元素是否出现在while循环中

  6. 6

    Ruby-Nils出现在数组中

  7. 7

    检查元音是否出现在字符串中

  8. 8

    提交表单后检查元素是否出现在页面上以检查用户是否已登录

  9. 9

    检查元素是否在数组中

  10. 10

    Mongo在数组元素上的聚合

  11. 11

    在Java中以递归方式对数组进行排序,偶数出现在数组前面。

  12. 12

    如何使属性的元素不出现在数据合同生成的XML中

  13. 13

    使用反应测试库检查文本是否出现在元素内

  14. 14

    使Polymer元素出现在JSBin中

  15. 15

    测试某些变量(不同版本)是否出现在数据中

  16. 16

    为什么长度不作为键出现在数组对象中?

  17. 17

    如何找到一组特定值出现在数组中的次数?

  18. 18

    JS / jQuery计算出现在数组中的对象的消失率

  19. 19

    用Java方式对列表进行排序,id出现在数组中

  20. 20

    查找最大数字出现在数组中的次数

  21. 21

    Java:最大值出现在数组中的次数

  22. 22

    如何计算一个数字出现在数组中的次数

  23. 23

    如何检查数组中的id是否出现在另一个数组中,然后将其推送到新数组

  24. 24

    如何检查当前主机是否出现在 ansible 中的变量列表中?

  25. 25

    为什么tbody标签出现在检查元素中?

  26. 26

    如何检查熊猫元素是否在数组中的列中

  27. 27

    如何检查一个单词是否出现在另一个单词(关键字)的ID(元素列表中的位置)中

  28. 28

    检查第一个参数中的所有元素是否出现在第二个参数中

  29. 29

    检查元素何时出现在视口中-> addClass

热门标签

归档