【问题标题】:How can I count the Mongo records that match a query or See if there are any results to a query?如何计算与查询匹配的 Mongo 记录或查看查询是否有任何结果?
【发布时间】:2014-11-14 07:56:08
【问题描述】:

简而言之:

我想看看我的 Days Mongo 集合是否包含从今天开始的任何 JavaScript Date() 对象。

var start = new Date().setHours(0,0,0);
var end = new Date().setHours(23,59,59);
var x = Days.find({time: {$gte: start, $lt: end}}).count(); // always returns 0.
console.log(x);

我可以在控制台中看到结果,但不知道如何提取我需要根据结果制作条件的内容。

更多信息:每天打卡一次

我正在制作一个非常基本的应用程序,用于跟踪您每天一次打卡的时间(并突出显示您在设定的标准目标时间之前所做的那些)。

它基本上是一个更简单的http://5clubapp.com,可以让你设置时间。

数据库非常基础:

的集合
Days = new Mongo.Collection("days");

...每个都有一个 JavaScript Date() 对象:time: Date()

我在 Meteor 中调用了 pinchIn 函数:

punchIn: function () {
  var start = new Date().setHours(0,0,0);
  var end = new Date().setHours(23,59,59);
  var x = Days.find({time: {$gte: start, $lt: end}}).count();

  if (x == 0) {
      // Punch in
      Days.insert({
        time: new Date() // current time
      });

  } else {
      // You already punched in today
  }

到目前为止,我很喜欢 Meteor,但我对 Mongo 完全陌生。答案可能非常简单,但我尝试过的方法没有奏效,所以我求助于你。

这只是一个帮助我熟悉 Meteor 和 Mongo 的测试项目,所以我试图让它尽可能简单。 (如果我有时间,我稍后会添加一些东西 - 用户、可自定义的目标......甚至可能是图表!)

谢谢。

【问题讨论】:

    标签: mongodb meteor


    【解决方案1】:

    当您执行new Date().setHours(0,0,0) 时,它会创建一个新的Date 对象,然后运行setHours,它会执行您想要的操作,但它返回 日期的整数表示,这就是您想要的最终存储在start。你需要这样做:

    var start = new Date();
    start.setHours(0,0,0);
    
    var end = new Date();
    end.setHours(23,59,59);
    

    如果您要进行大量日期操作,我建议您使用像 moment 这样的库。我还建议 punchIn 是一种方法(您的问题不清楚),以便使用相同的时钟(服务器的)来记录所有日期。

    【讨论】:

    • 我正要发布这个!或者你可以做new Date(new Date().setHours(0, 0, 0))。你通常不会受到这种影响,因为 JS 会为你进行必要的转换,但 Mongo 不会。
    • 你知道,我最初就是这么写的。然后我想我会变得聪明并节省两行。 facepalm 总是小事......
    猜你喜欢
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 2021-05-31
    • 2022-06-10
    相关资源
    最近更新 更多