MongoDB查询今日通话列表
这是MongoDB中用户表中一个用户的数据MongoDB查询今日通话列表,mongodb,mongoose,Mongodb,Mongoose,这是MongoDB中用户表中一个用户的数据 { "_id" : ObjectId("553799187174b8c402151d06"), "modified" : ISODate("2015-04-22T12:50:32.477Z"), "name" : "Suresh", "userId" : "sursha6398", "created" : ISODate("2015-04-22T12:50:32.457Z"), "deleted" : false, "call_schedule" :
{
"_id" : ObjectId("553799187174b8c402151d06"),
"modified" : ISODate("2015-04-22T12:50:32.477Z"),
"name" : "Suresh",
"userId" : "sursha6398",
"created" : ISODate("2015-04-22T12:50:32.457Z"),
"deleted" : false,
"call_schedule" : [
{
"callType" : "a",
"callDate" : ISODate("2015-01-14T18:30:00.000Z"),
"_id" : ObjectId("553799187174b8c402151d0e")
},
{
"callType" : "a",
"callDate" : ISODate("2015-01-31T18:30:00.000Z"),
"_id" : ObjectId("553799187174b8c402151d0d")
},
{
"callType" : "b",
"callDate" : ISODate("2015-02-19T18:30:00.000Z"),
"_id" : ObjectId("553799187174b8c402151d0c")
},
{
"callType" : "b",
"callDate" : ISODate("2015-03-02T18:30:00.000Z"),
"_id" : ObjectId("553799187174b8c402151d0b")
},
{
"callType" : "c",
"callDate" : ISODate("2015-03-17T18:30:00.000Z"),
"_id" : ObjectId("553799187174b8c402151d0a")
},
{
"callType" : "b",
"callDate" : ISODate("2015-03-30T18:30:00.000Z"),
"_id" : ObjectId("553799187174b8c402151d09")
},
{
"callType" : "a",
"callDate" : ISODate("2015-04-08T18:30:00.000Z"),
"_id" : ObjectId("553799187174b8c402151d08")
},
{
"callType" : "d",
"callDate" : ISODate("2015-04-22T18:30:00.000Z"),
"_id" : ObjectId("553799187174b8c402151d07")
}
],
"__v" : 0
}
有数百个用户,每个用户都安排了一个或多个呼叫。
我需要使用mongodb查询找到今天安排的具有相应用户ID的呼叫总数。要获取具有相应
用户ID的呼叫总数,需要使用mongodb的。聚合管道由管道阶段组成,作为第一步,过滤集合中具有从今天开始到明天之前的调用计划的文档,即查询条件是日期范围。然后,下一个管道阶段使用操作符解构call\u schedule
数组,以便为数组中的每个元素获得文档的输出。每个输出文档都用元素值替换数组。操作完成后,进一步过滤文档,仅获取符合条件的文档。下一个管道阶段将是操作符,您可以在其中按userid对文档进行分组,并使用该操作符对组中的每个文档计算聚合总和。因此,最终的聚合管道如下所示:
var start = new Date(); // today's date
var end = new Date(new Date().setDate(new Date().getDate()+1));
var pipeline = [
{
"$match": {
"call_schedule.callDate": {
"$gte": start,
"$lt": end
}
}
},
{
"$unwind": "$call_schedule"
},
{
"$match": {
"call_schedule.callDate": {
"$gte": start,
"$lt": end
}
}
},
{
"$group": {
"_id": {
"userId": "$userId"
},
"total": {
"$sum": 1
}
}
}
];
db.collection.aggregate(pipeline);
输出:
/* 0 */
{
"result" : [
{
"_id" : {
"userId" : "sursha6398"
},
"total" : 3 // <-- this gives you the total number of calls made by userid today
}
],
"ok" : 1
}
样本收集包含以下文件(包括3个以今天日期(即2015-04-29)制定的通话计划):
/* 0 */
{
"_id" : ObjectId("553799187174b8c402151d06"),
"modified" : ISODate("2015-04-22T12:50:31.477Z"),
"name" : "Suresh",
"userId" : "sursha6398",
"created" : ISODate("2015-04-22T12:50:32.457Z"),
"deleted" : false,
"call_schedule" : [
{
"callType" : "a",
"callDate" : ISODate("2015-01-14T18:30:00.000Z"),
"_id" : ObjectId("553799187174b8c402151d0e")
},
{
"callType" : "a",
"callDate" : ISODate("2015-01-31T18:30:00.000Z"),
"_id" : ObjectId("553799187174b8c402151d0d")
},
{
"callType" : "b",
"callDate" : ISODate("2015-02-19T18:30:00.000Z"),
"_id" : ObjectId("553799187174b8c402151d0c")
},
{
"callType" : "b",
"callDate" : ISODate("2015-03-02T18:30:00.000Z"),
"_id" : ObjectId("553799187174b8c402151d0b")
},
{
"callType" : "c",
"callDate" : ISODate("2015-03-17T18:30:00.000Z"),
"_id" : ObjectId("553799187174b8c402151d0a")
},
{
"callType" : "b",
"callDate" : ISODate("2015-04-29T18:30:00.000Z"),
"_id" : ObjectId("553799187174b8c402151d09")
},
{
"callType" : "a",
"callDate" : ISODate("2015-04-29T18:30:00.000Z"),
"_id" : ObjectId("553799187174b8c402151d08")
},
{
"callType" : "d",
"callDate" : ISODate("2015-04-29T18:30:00.000Z"),
"_id" : ObjectId("553799187174b8c402151d07")
}
]
}
上述聚合将给出以下输出:
/* 0 */
{
"result" : [
{
"_id" : {
"userId" : "sursha6398"
},
"call_list" : [
{
"callType" : "d",
"callDate" : ISODate("2015-04-29T18:30:00.000Z"),
"_id" : ObjectId("553799187174b8c402151d07")
},
{
"callType" : "a",
"callDate" : ISODate("2015-04-29T18:30:00.000Z"),
"_id" : ObjectId("553799187174b8c402151d08")
},
{
"callType" : "b",
"callDate" : ISODate("2015-04-29T18:30:00.000Z"),
"_id" : ObjectId("553799187174b8c402151d09")
}
]
}
],
"ok" : 1
}
“对于今天”,今天是可变的或静态的(2015/04/29
)?对于任何日期。我只想知道如何使用userID获取调用列表,一个问题是如何匹配日期而不担心表的日期中存在的时间部分。您可以使用查询来“忘记”时间。{$and:[{“call u schedule.callDate”:{$gte:ISODate(“2015-01-14T00:00:00.000Z”)},{“call_schedule.callDate”:{$lte:ISODate(“2015-01-14T23:59:59.000Z”)}
如何使用userid获取过滤后的通话时间表。如何使用userid获取过滤后的通话时间表。@ashish\u pbh您能不能至少更明确地回答您的问题,您问我需要使用mongodb查询找到具有相应userid的今天安排的通话总数。上面返回了今天安排的通话总数?正如我在标题中所写的,我需要通话列表是指使用用户ID的特定日期的通话时间表。因此,如果我一开始无法澄清,请谨慎。@ashish\u pbh别担心,我已经更新了我的答案。如果可能的话,请您也更新问题中的详细信息,以便更清楚地了解标题中明确说明的内容在你的问题中反映出你所问的,因此会有歧义。我会更新这些问题,非常感谢。这正是我所需要的:)
/* 0 */
{
"result" : [
{
"_id" : {
"userId" : "sursha6398"
},
"call_list" : [
{
"callType" : "d",
"callDate" : ISODate("2015-04-29T18:30:00.000Z"),
"_id" : ObjectId("553799187174b8c402151d07")
},
{
"callType" : "a",
"callDate" : ISODate("2015-04-29T18:30:00.000Z"),
"_id" : ObjectId("553799187174b8c402151d08")
},
{
"callType" : "b",
"callDate" : ISODate("2015-04-29T18:30:00.000Z"),
"_id" : ObjectId("553799187174b8c402151d09")
}
]
}
],
"ok" : 1
}