以下是用户的集合,它有5个字段,我想查询username
,created_on
以及根据他们注册的日期基于created_on
属性的用户数量
例如,如果假设它包含两个注册了该特定日期的用户,我需要使用created_on
属性查询在03-03-2017日期注册的用户
我的查询应该返回{"user":["user1", "user2"], "num_users":2}
{
"_id": ObjectId("58b955c47ff9182e54bac2e5"),
"username": "Sanjay",
"password": "$2a$10$JoLx9R0f1WI23R9i/ieSl.YFFO9Auu.dJBdw4BvRQ/vKqKp9rTv6.",
"dob": "2121-03-11T18:30:00.000Z",
"email": "jp@newgmail",
"created_on": ISODate("2017-03-03T11:40:00.692Z"),
"__v": 0
} {
"_id": ObjectId("58b956107ff9182e54bac2e6"),
"username": "rahul",
"password": "$2a$10$Z7IRhIORAi9zlXGNewxsceaO66CQr7hg142yMdQilMqKhYwtC/wSm",
"dob": "1211-02-20T18:30:00.000Z",
"email": "rahul@gmail.com",
"created_on": ISODate("2017-03-02T11:40:00.692Z"),
"__v": 0
} {
"_id": ObjectId("58b9562b7ff9182e54bac2e7"),
"username": "ravi",
"password": "$2a$10$fAqiyM.b9.B7x.LpLaUnnOdCSF.4xj55uSyOD6KLwlXu1W6awM66C",
"dob": "2017-03-20T18:30:00.000Z",
"email": "gmail@ravi",
"created_on": ISODate("2017-03-03T11:40:00.692Z"),
"__v": 0
} {
"_id": ObjectId("58ba69fac3285e193089a62b"),
"username": "prashanth",
"password": "$2a$10$CPQiRBk5tiUGna8JHmQhhO.a9SYBz0RyDCuFdLdc6IrpAWbw7d/Ua",
"dob": "1993-02-20T18:30:00.000Z",
"email": "jprashanthgowda34@gmail.com",
"created_on": ISODate("2017-03-04T07:17:14.563Z"),
"__v": 0
}
我正在做的是:
db.usercollection.aggregate([{
$group: {
_id: "$created_on",
num_user: {
$sum: 1
}
}
}])
我需要查询的是:
{
"_id" : ISODate("2017-03-02T11:40:00.692Z"),
"num_user" : 1,
"users" : ["sanjay"]
}
{
"_id" : ISODate("2017-03-04T07:17:14.563Z"),
"num_user" : 1,
users:["prashanth"]
}
{
"_id" : ISODate("2017-03-03T11:40:00.692Z"),
"num_user" : 2,
"users" : ["rahul", "ravi"];
}
请建议我解决方案。如果我的方法是错误的,请告诉我如何才能解决这个问题。
提前致谢...
答案 0 :(得分:2)
在汇总中使用$push
:
db.usercollection.aggregate([{
$group: {
_id: "$created_on",
users: {
$push: "$username"
},
num_user: {
$sum: 1
}
}
}])
在username
数组中添加users
JSONObject:
db.data.aggregate([{
$group: {
_id: "$created_on",
users: {
$push: {
username: "$username"
}
},
num_user: {
$sum: 1
}
}
}])
答案 1 :(得分:0)
在$ group stage aggregate中使用$ push运算符,
db.tr.aggregate([{
$group: {
_id: "$created_on",
user: {
$push: "$username"
},
num_user: {
$sum: 1
}
}
}]).pretty()