如何使用mongoDB比较查询运算符检查createdAt日期之间的值?

如何使用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

我想查看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 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();