如何使用mongoDB比较查询运算符检查createdAt日期之间的值?
我想查看9月1日开始至9月30日结束期间在数据库中创建的所有用户Meteor.users.find().fetch()。如何在代码中实现这一点 查找我失败的尝试:如何使用mongoDB比较查询运算符检查createdAt日期之间的值?,mongodb,date,meteor,mongodb-query,Mongodb,Date,Meteor,Mongodb Query,我想查看9月1日开始至9月30日结束期间在数据库中创建的所有用户Meteor.users.find().fetch()。如何在代码中实现这一点 查找我失败的尝试: var beginningOfMonth = new Date(); beginningOfMonth.setMonth(8, 1); console.log("beginning Of the Month: "+beginningOfMonth); 上面的代码是: beginning Of the Month: Sat Sep
var beginningOfMonth = new Date();
beginningOfMonth.setMonth(8, 1);
console.log("beginning Of the Month: "+beginningOfMonth);
上面的代码是:
beginning Of the Month: Sat Sep 01 2018 21:44:00 GMT+0300 (East Africa Time)
上述代码产生:
end Of the Month: Sun Sep 30 2018 21:44:00 GMT+0300 (East Africa Time)
…到目前为止非常完美,但在以下查询中:
Meteor.users.find({ createdAt: { $gte: currentDate }}, { createdAt: { lte: endMonth }}, { "services.google.email": { $exists: true } } ).fetch();
上面的查询产生下面的结果。请注意,createAt
日期不在查询查询的范围内
[{…}]
0:
createdAt: Thu Oct 04 2018 14:54:33 GMT+0300 (East Africa Time)
profile: {name: "Sir ProgrammerAllot"}
services: {google: {…}, resume: {…}}
_id: "2trR7WxnqKJuuipG8"
__proto__: Object
length: 1
__proto__: Array(0)
如何修改查询以仅显示9月1日至9月最后一天在数据库中创建的用户
期待您的回复。您需要将所有查询词放入一个对象中(并使用
$lte
而不是lte
):
您需要将所有查询词放入一个对象中(并使用
$lte
而不是lte
):
按照@JohnnyHK的建议,将“查询项放入单个对象”,并包装每个查询(条件)语句,有助于使整个查询工作正常
找到以下工作解决方案:
Meteor.users.find(
{createdAt: { $gte: beginningOfMonth, $lte: endOfMonth }},
{"services.google.email": { $exists: true }}
).count();
按照@JohnnyHK的建议,将“查询项放入单个对象”,并包装每个查询(条件)语句,有助于使整个查询工作正常
找到以下工作解决方案:
Meteor.users.find(
{createdAt: { $gte: beginningOfMonth, $lte: endOfMonth }},
{"services.google.email": { $exists: true }}
).count();
感谢您的回复,不幸的是,您的解决方案(尽管它具有逻辑意义)根本没有产生任何结果……详细阐述您的解决方案时,我发现包装每个条件有助于查询工作。为了清楚起见,请查看答案。再次感谢。感谢您的回复,不幸的是,您的解决方案(尽管它具有逻辑意义)根本不会产生任何结果……在详细阐述您的解决方案时,我发现包装每个条件有助于查询工作。为了清楚起见,请查看答案。再次感谢。如果您没有正确地将开始时间和结束时间缩短到午夜(UTC或本地时间,具体取决于您的要求),那么这些查询将出现问题。您通常还希望在结束日期上使用严格的小于,并将该日期设置为下个月的第一天,即
{createdAt:{gte:firstDayOfMonthAt00,lt:firstDayOfFollowingMonthAt00}
这避免了计算每个月有多少天。如果您没有正确地将开始和结束时间的小时数截断为午夜(UTC或本地,具体取决于您的要求),则这些查询将出现问题。您通常还希望在结束日期使用严格的小于,并将该日期设置为下个月的第一天,即{createdAt:{gte:firstdayOfMontat00,lt:firstDayOfFollowingMonthAt00}
这避免了计算每个月有多少天。
Meteor.users.find(
{createdAt: { $gte: beginningOfMonth, $lte: endOfMonth }},
{"services.google.email": { $exists: true }}
).count();