我的MongoDB数据结构就像这样
{
"_id" : ObjectId("5a3a67b102d9d926f8cd66b8"),
"createdate" : ISODate("2017-12-20T13:37:53.921Z"),
"groupmember" : [
{
"membername" : "a",
"memberid" : "5a20ee1acdacc7086ce7742c"
},
{
"membername" : "b",
"memberid" : "5a20eb5bcdacc7086ce77427"
},
{
"membername" : "c",
"memberid" : "5a20ee35cdacc7086ce7742d"
},
{
"membername" : "d",
"memberid" : "5a20ee67cdacc7086ce7742e"
},
{
"membername" : "e",
"memberid" : "5a20ee9acdacc7086ce7742f"
}
],
"__v" : 0
}
现在我想计算组成员数组上存在的成员总数。 我有一个解决方案但它不适用于任何特定的ID。 我的解决方案是这样的
Test.aggregate([
{$group:{'_id': '$_id', 'total': { $sum: { $size:"$groupmember" } }}}
], function(error, data){
if (error) {
console.log(error)
} else {
console.log(data);
}
});
因此,此方法返回数据库的所有计数。 我也尝试过Match和unwind但它返回空白数组。像这样
Test.aggregate([
{$match: {_id: '5a3a67b102d9d926f8cd66b8'}},
{$unwind: "$groupmember"},
{$group:{'_id': '$_id', 'total': { $sum: { $size:"$groupmember" } }}}
], function(error, data){
if (error) {
console.log(error)
} else {
console.log(data);
}
});
答案 0 :(得分:0)
你可以这样做:
Test.aggregate(
[
{
$project: {
noOfGroupMembers: { $size: "$groupmember" }
}
}
]
)
如果你想用id:
这样做Test.aggregate(
[
{
$match:"5a3a67b102d9d926f8cd66b8"
},
{
$project: {
noOfGroupMembers: { $size: "$groupmember" }
}
}
]
)
答案 1 :(得分:0)
Test.find({_id: '5a3a67b102d9d926f8cd66b8'}, function(err, data){
if(err){
console.log(err)
} else {
var length = data[0].groupmember.length;
console.log(length);
}
});