美文网首页
[日记]Mongo聚合查询

[日记]Mongo聚合查询

作者: 刘开心_8a6c | 来源:发表于2019-03-14 17:31 被阅读0次

collection

/* 1 */
{
    "_id" : ObjectId("5c89fb827f5cc02498908c53"),
    "item" : "journal",
    "tags" : [ 
        {
            "id" : 1.0,
            "name" : "blank"
        }, 
        {
            "id" : 2.0,
            "name" : "red"
        }
    ]
}

/* 2 */
{
    "_id" : ObjectId("5c89fb827f5cc02498908c54"),
    "item" : "mat",
    "tags" : [ 
        {
            "id" : 1.0,
            "name" : "gray"
        }, 
        {
            "id" : 2.0,
            "name" : "blank"
        }, 
        {
            "id" : 3.0,
            "name" : "blank"
        }
    ]
}

/* 3 */
{
    "_id" : ObjectId("5c89fb827f5cc02498908c55"),
    "item" : "mousepad",
    "tags" : [ 
        {
            "id" : 1.0,
            "name" : "gel"
        }, 
        {
            "id" : 2.0,
            "name" : "blue"
        }
    ]
}

1

使用mongo查询一个对象数组中元素属性为特定值的数据,期望查询结果为:

/* 1 */
{
    "_id" : ObjectId("5c89fb827f5cc02498908c53"),
    "tags" : []
}

/* 2 */
{
    "_id" : ObjectId("5c89fb827f5cc02498908c54"),
    "tags" : [ 
        {
            "id" : 2.0,
            "name" : "blank"
        }, 
        {
            "id" : 3.0,
            "name" : "blank"
        }
    ]
}

/* 3 */
{
    "_id" : ObjectId("5c89fb827f5cc02498908c55"),
    "tags" : []
}

语句:

db.test.aggregate(
[
    {
        $project:{
            tags:{
                $filter:{
                    input:"$tags", 
                    as:"tag", 
                    cond:{$eq:["$$tag.name", "blank"]}
                }
            }
        }
     },
     {
         $project:{
             tags:{
                 $filter:{
                     input:"$tags", 
                     as:"tag", 
                     cond:{$gte:[{$size:"$tags"}, 2]}
                 }
             }
          }
      }
])

2

若想得到每条数据里tags中name=blank的数据个数,语句为:

db.test.aggregate(
[
    {
        $project:{
            tags:{
                $filter:{
                    input:"$tags", 
                    as:"tag", 
                    cond:{$eq:["$$tag.name", "blank"]}
                }
            }
        }
     },
     {
         $project:{
             count:{
                 $size: "$tags"
             }
          }
      }
])

结果为:

/* 1 */
{
    "_id" : ObjectId("5c89fb827f5cc02498908c53"),
    "count" : 1
}

/* 2 */
{
    "_id" : ObjectId("5c89fb827f5cc02498908c54"),
    "count" : 2
}

/* 3 */
{
    "_id" : ObjectId("5c89fb827f5cc02498908c55"),
    "count" : 0
}

3

若想取count=2的数据,语句:

db.test.aggregate(
[
    {
        $project:{
            tags:{
                $filter:{
                    input:"$tags", 
                    as:"tag", 
                    cond:{$eq:["$$tag.name", "blank"]}
                }
            }
        }
     },
     {
         $project:{
             count:{
                 $size: "$tags"
             }
          }
      },
      {
          $match:{
              count:2
          }
      }
])

效果:

/* 1 */
{
    "_id" : ObjectId("5c89fb827f5cc02498908c54"),
    "count" : 2
}

好的mongo聚合查询博客:

相关文章

  • [日记]Mongo聚合查询

    collection 1 使用mongo查询一个对象数组中元素属性为特定值的数据,期望查询结果为: 语句: 2 若...

  • mongo聚合查询

    1.概述 MongoDB 聚合框架(Aggregation Framework)是一个计算框架,它可以:• 作用在...

  • Mongodb 的高级查询

    关键词:mongodb, mongo, project, group, aggregate, 聚合管道, 高级查询...

  • mongo $match查询日期结果错误

    今天使用mongo聚合查询某个时间段的数据 发现返回结果错误 经过排查问题 在聚合中$match查询和平常使用fi...

  • mongo回顾(八:聚合查询二)

    上一篇简单的介绍了mongo的聚合查询,并举例了match与lookup的使用,今天的话继续介绍聚合查询与Mong...

  • mongo回顾(七:聚合查询)

    上一篇简单介绍了mongo的增删改查,今天来聊聊mongo的聚合操作 什么是 MongoDB 聚合框架 Mongo...

  • mongo聚合

    mongo聚合

  • 更新mongo版本

    换了电脑,软件几乎都是安装的最新版本的,结果mongo版本和项目不适用,原因是Mongo的聚合查询要强制使用c...

  • 整理最近用的Mongo查询语句

    背景 最近做了几个规则逻辑。用到mongo查询比较多,就是查询交易信息跑既定规则筛选出交易商户,使用聚合管道进行统...

  • mongo回顾(九:聚合查询三)

    mongo的聚合查询操作符是比较多的,平常也无需全部用法都记住,有个大体概念后,使用时翻阅下官方文档也是一个不错的...

网友评论

      本文标题:[日记]Mongo聚合查询

      本文链接:https://www.haomeiwen.com/subject/julcmqtx.html