mongoose统计某个数组字段的长度问题?
发布于 6 年前 作者 wiscgazf 2632 次浏览 来自 问答

例如下面列出的数据有很多条,怎样可以用aggregate 统计出 每条文档的replyData 的大小啊 和总的文档下面的replyData的总和?

我用aggregate 写法如下(用错了) 用法不太明白 希望大家能指导一下 Reply.aggregate([{$group: {replyData: {$size: ‘$replyData’}}}]).then(data => { console.log(data) }).catch(err => { console.log(err) });

{ "_id" : ObjectId(“5ba2662c3660240578096152”), “notesData” : ObjectId(“5b855799d193e81fece79a01”), “userData” : ObjectId(“5b7ad0d661f77003e098ec96”), “replyData” : [ { "_id" : ObjectId(“5ba2662c3660240578096153”), “from” : null, “to” : ObjectId(“5b7ad0d661f77003e098ec96”), “content” : “我这是新用户[笑cry][允悲]”, “createTime” : ISODate(“2018-09-19T15:07:24.738Z”) }, { "_id" : ObjectId(“5ba2680db4dd691b0c03b9da”), “from” : ObjectId(“5b7ad0d661f77003e098ec96”), “to” : ObjectId(“5b97d8deb96d7e14d8da33d6”), “content” : “你好,世界[吃瓜][允悲][笑cry]”, “createTime” : ISODate(“2018-09-19T15:15:25.132Z”) } ], "__v" : 0 }, { "_id" : ObjectId(“5ba2662c3660240578096152”), “notesData” : ObjectId(“5b855799d193e81fece79a01”), “userData” : ObjectId(“5b7ad0d661f77003e098ec96”), “replyData” : [ { "_id" : ObjectId(“5ba2662c3660240578096153”), “from” : null, “to” : ObjectId(“5b7ad0d661f77003e098ec96”), “content” : “我这是新用户[笑cry][允悲]”, “createTime” : ISODate(“2018-09-19T15:07:24.738Z”) }, { "_id" : ObjectId(“5ba2680db4dd691b0c03b9da”), “from” : ObjectId(“5b7ad0d661f77003e098ec96”), “to” : ObjectId(“5b97d8deb96d7e14d8da33d6”), “content” : “你好,世界[吃瓜][允悲][笑cry]”, “createTime” : ISODate(“2018-09-19T15:15:25.132Z”) } ], "__v" : 0 }

2 回复

写一个无限级循环判断一下,可以获取到你需要的count

db.station_data.mapReduce(function(){emit(“totals”, this.replyData.length+1)}, function(key, values){return Array.sum(values)}, {out: “test”}) db.test.find({})

返回值就是你想要的 { “_id” : “totals”, “value” : 46569 }

类似这样的一条记录

回到顶部