提问者:小点点

如何统计猫鼬中其他子文档上的特定子文档?


null

{
    "user" : "admin",
    "exercises" : [
        {
            "name" : "exercise 1",
            "documents" : [
                {
                    "idDoc" : "1",
                    "name" : "doc1"
                },
                {
                    "idDoc" : "2",
                    "name" : "doc1"
                },
                {
                    "idDoc" : "3",
                    "name" : "doc2"
                }
            ]
        }
    ]
}

如何统计名称=doc1的所有文档?

输出为:

{
    "_id" : "objectId", --userId
    "count" : 2
}

null

Schema.aggregate()
            .match({ user: username })
            .project({ size: {
                $reduce : {
                    "input" : "$exercises",
                    "initialValue" : 0,
                    "in" : {"$add":["$$value",{"$size":"$$this.documents"}]}
                }
            }});

null


共1个答案

匿名用户

null

db.collection.aggregate([
  { $match: { user: "admin" } },
  {
    $addFields: {
      count: {
        $size: {
          $reduce: {
            input: "$exercises",
            initialValue: [],
            in: {
              $concatArrays: [
                "$$value",
                {
                  $filter: {
                    input: "$$this.documents",
                    as: "item",
                    cond: { $eq: ["$$item.name", "doc1"] }
                  }
                }
              ]
            }
          }
        }
      }
    }
  },
])

null