首页 > 解决方案 > 计算 MonogDb 文档中数组字段内的对象数量

问题描述

如何在某个字段中将具有相同 id 的所有文档分组,并计算其中一个字段内数组的长度。

就像我下面的例子一样,结果应该是:

{ 
    movieId: ("5b79b8387d467d5ab860544f")
    takenSeats : 46 
}

{ 
   movieId : ("5b79b9277d467d5ab8605454")
   takenSeats : 11

}

{
   movieId : ("5b79b8927d467d5ab8605451")
   takenSeats: 17
}

蒙古数据库

这就是我开始聚合的方式:

db.orders.aggregate([
        { $match:{ "created":{$gt: new Date(ISODate().getTime() - 1000*60*60*24*15)}}}, 
        { $lookup: { from: "shows", localField: "showId", foreignField: "_id", as: "acociatedShow" }},
        { $unwind: "$acociatedShow" }, { $replaceRoot: { newRoot: "$acociatedShow" } },
        { $group: {_id: '$_id' ,movieId: { $first: '$movie' },takenSeats: { $first: '$takenSeats' }}}, 
 ])

[编辑]

结果使用:

db.orders.aggregate([
        { $match:{ "created":{$gt: new Date(ISODate().getTime() - 1000*60*60*24*15)}}}, 
        { $lookup: { from: "shows", localField: "showId", foreignField: "_id", as: "acociatedShow" }},
        { $unwind: "$acociatedShow" }, { $replaceRoot: { newRoot: "$acociatedShow" } },
          { $group: {_id: '$movie',takenSeats: { $sum: {$size:'$takenSeats' }}}}
 ])

在此处输入图像描述

$push我通过这个查询得到了想要的结果,但问题是我可以在没有运算符的情况下让它更短

db.orders.aggregate([
        { $match:{ "created":{$gt: new Date(ISODate().getTime() - 1000*60*60*24*15)}}}, 
        { $lookup: { from: "shows", localField: "showId", foreignField: "_id", as: "acociatedShow" }},
        { $unwind: "$acociatedShow" }, { $replaceRoot: { newRoot: "$acociatedShow" } },
        { $group: {_id: '$_id' ,movieId: { $first: '$movie' },takenSeats: { $first: '$takenSeats' }}}, 
        { $unwind: "$takenSeats" },       
        { $group:{ _id: "$movieId","takenSeats":{"$push": "$takenSeats"}}},
 ])

在此处输入图像描述

标签: mongodb

解决方案


推荐阅读