在日期范围内返回唯一数据的Mongo查询
问题描述:
我需要查询我的用户集合中的新用户,该用户集合在日期“2015-11-20”之后开始,仅返回唯一的电子邮件。在日期范围内返回唯一数据的Mongo查询
这里的结构的一个示例:
{
"_id" : ObjectId("abcd123"),
"user_name" : "My Name",
"last_name" : "Name",
"first_name" : "My",
"email" : "[email protected]",
"user_type" : "general",
"joining_date" : ISODate("2015-11-20T14:56:57.165Z")
}
这里是我的查询到目前为止,我不知道它是如何确保,如果连,只有唯一的电子邮件被退回。
db.users.aggregate([{$match: {"joining_date": {$gt: ISODate("2015-11-20")}}},{$group: {_id:{email: "$email", "first_name": "$first_name", "last_name": "$last_name", "user_name": "$user_name"}}}]).pretty();
答
代替聚合,您可以使用distinct
收集方法。所以从上面的例子你不同的查询将如下所示:
db.users.distinct('email', {"joining_date": {$gt: ISODate("2015-11-20")}}
上述查询返回基于条件的电子邮件的数组。
当您按电子邮件,用户名,名字和姓氏进行分组时,您的聚合查询不会返回唯一的电子邮件。这将返回它们的独特组合。如果您只是通过电子邮件分组,那么您将获得唯一的邮件ID。但是,然后所有的邮件ID将在单独的文档中,并且您需要迭代结果集。有一个类似于上面显示的不同方法的类似聚合查询。
db.users.aggregate([
{$match: {"joining_date": {$gt: ISODate("2015-11-20")}}},
{$group: {_id:null, emailIds: {$addToSet : "$email"}}}
])
答
db.collectionName.aggregate([ {$组:{_ ID: “$ distinctcolumnname”,计数:{$总和:1}}}, {$匹配:{ “datecolumnname”:{$ gte:“21-08-2016 00:00:00”,$ lte:“21-08-2016 09:59:59”}}}]);
使用正确的代码格式。 –