代码之家  ›  专栏  ›  技术社区  ›  Bogdan Dubyk

在提供的数据数组中,没有对行进行计数

  •  1
  • Bogdan Dubyk  · 技术社区  · 5 年前

    我有这样的收藏:

    { 
       "_id" : ObjectId("4d663451d1e7242c4b68e000"), 
      "topic" : "abc", 
      "subLevel" : {
         "id" : 1
      }
    }
    { 
        "_id" : ObjectId("4d6634514cb5cb2c4b69e000"), 
        "topic" : "bce", 
        "subLevel" : {
            "id" : 1
         }
    }
    
    { 
        "_id" : ObjectId("4d6634514cb5cb2c4b70e000"), 
        "topic" : "bec", 
        "subLevel" : {
            "id" : 2
         }
    }
    { 
        "_id" : ObjectId("4d6634514cb5cb2c4b70e000"), 
        "topic" : "vvv", 
        "subLevel" : {
            "id" : 3
         }
    }
    

    db.getCollection('products').aggregate( [
       { $project: 
           {  "has_sublevel" : {$in: [ "subLevel.id", [1 , 2 ]]} }
       },
       { $group: { _id : "$subLevel.id", count: { $sum: 1 } } }
    ] )
    

    但结果是

    {
       _id : null,
       count: 4
    }
    

    我该怎么办,提前谢谢!

    如果将其转换为我更熟悉的SQL,查询应该如下所示:

    select subLevelId, count(id) FROM products where subLevelId in (1,2) group by subLevelId
    
    3 回复  |  直到 5 年前
        1
  •  1
  •   J.F.    5 年前

    如果我理解正确的话,你就这么接近了,请检查以下查询:

    • 首次使用 $match 只获取 subLevel.id
    • 然后,正如你所做的, $group id
    db.collection.aggregate([
      {
        "$match": { "subLevel.id": { "$in": [ 1, 2 ] } }
      },
      {
        "$group": { "_id": "$subLevel.id", "count": { "$sum": 1 } }
      }
    ])
    

    here

        2
  •  1
  •   R2D2    5 年前

    db.products.aggregate([  {$match:{ "subLevel.id":{ $in:[1,2]  } }}   , {$group:{ _id:"$subLevel.id" , count:{$sum:1}   } }   ])
    

    就像:

    db.products.aggregate([  {$match:{ $or:[{"subLevel.id":1},{"subLevel.id":2}   ]}}   , {$group:{ _id:"$subLevel.id" , count:{$sum:1}   } }   ])
    
        3
  •  1
  •   codemonkey    5 年前

    您需要将相应的文档推入各自的数组中,然后获得它们的大小:

    db.collection.aggregate([
      {
        "$match": {
          "subLevel.id": {
            $in: [
              1,
              2
            ]
          }
        }
      },
      {
        $group: {
          "_id": "$subLevel.id",
          ids: {
            $push: "$_id"
          }
        }
      },
      {
        $project: {
          _id: false,
          ids: {
            $size: "$ids"
          }
        }
      }
    ])
    

    游戏场地: https://mongoplayground.net/p/J1ei37l1K5-