我在mongo有一些文件看起来像这样:

{
  _id : ObjectId("..."),
  "make" : "Nissan",
  ..
},
{
  _id : ObjectId("..."),
  "make" : "Nissan",
  "saleDate" :  ISODate("2013-04-10T12:39:50.676Z"),
  ..
}

理想情况下,我希望能够按品牌统计每天售出的车辆数量.然后,我想查看今天,或是过go 七天中的一个窗口,比如今天.

我能用一些丑陋的代码完成每日视图

db.inventory.aggregate(
  { $match : { "saleDate" : { $gte: ISODate("2013-04-10T00:00:00.000Z"), $lt: ISODate("2013-04-11T00:00:00.000Z")  } } } ,
  { $group : { _id : { make : "$make", saleDayOfMonth : { $dayOfMonth : "$saleDate" } }, cnt : { $sum : 1 } } }
)

然后得出结果

{
  "result" : [
    {
      "_id" : {
        "make" : "Nissan",
        "saleDayOfMonth" : 10
      },
      "cnt" : 2
    },
    {
      "_id" : {
        "make" : "Toyota",
        "saleDayOfMonth" : 10
      },
      "cnt" : 4
    },
  ],
  "ok" : 1
}

这没关系,但我更希望不必更改查询中的两个datetime值.然后,正如我上面提到的,我希望能够运行这个查询(同样,不必每次都修改它),并看到上周按天分类的相同结果.

哦,这是我用于查询的示例数据

db.inventory.save({"make" : "Nissan","saleDate" :  ISODate("2013-04-10T12:39:50.676Z")});
db.inventory.save({"make" : "Nissan"});
db.inventory.save({"make" : "Nissan","saleDate" :  ISODate("2013-04-10T11:39:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" :  ISODate("2013-04-09T11:39:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" :  ISODate("2013-04-10T11:38:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" :  ISODate("2013-04-10T11:37:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" :  ISODate("2013-04-10T11:36:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" :  ISODate("2013-04-10T11:35:50.676Z")});

提前谢谢,

推荐答案

在Mongo 2.8 RC2中,有一个新的数据聚合操作符:$dateToString可用于按天分组,结果中只需有一个"YYYY-MM-DD":

文档中的示例:

db.sales.aggregate(
  [
     {
         $project: {
                yearMonthDay: { $dateToString: { format: "%Y-%m-%d", date: "$date" } },
                time: { $dateToString: { format: "%H:%M:%S:%L", date: "$date" } }
         }
     }
  ]
)

将导致:

{ "_id" : 1, "yearMonthDay" : "2014-01-01", "time" : "08:15:39:736" }

Mongodb相关问答推荐

会话的Mongo-go驱动程序版本.Copy()

MongoDB:就地分组嵌套数组的元素

在MongoDB中获取所有帖子时如何获取相关用户信息

MongoDB - 家庭作业(job)帮助.不确定如何在 mongodb 中访问文档中的变量

使用 mongo-driver/mongo 使用键/值对中的值表达式查找文档

根据聚合管道MongoDB Atlas触发器中的条件更新多个字段

在 MongoDB 中使用 findOneAndUpdate 有条件地更新/更新嵌入式数组

使用 AngularJs 和 MongoDB/Mongoose

MongoDB $或PHP中的查询

Mongoose:填充填充字段

Mongodb 约定包

如何在mongoose中加入两个集合

MongoDb:如何将附加对象插入对象集合?

mongoose字符串到 ObjectID

Mongo:匹配聚合查询中的日期似乎被忽略了

使用 mongoengine 将多文档插入到 mongodb

何时使用Singleton单例、Transient和使用 Ninject 和 MongoDB 的请求

与 mongoose/node.js 共享数据库连接参数的最佳方式

如何使用 mongodb-java-driver 进行 upsert

将 FilterDefinition 转换为可以在 mongo shell 中运行的常规 json mongo 查询