首页 > 解决方案 > 对 Mongodb 中的投影执行不同的操作

问题描述

类似于但不同于其他 SO 问题:

更新

我有一个集合,所有记录都有一个字段dateISODate例如:

{
  date: 12 January 2020,
  event: "start",
},
{
  date: 23 January 2020,
  event: "stop"
},
{
  date: 23 January 2020,
  event: "stop",
},
{
  date: 2 March 2020,
  event: "pause"
}

我想找到(例如)2020 年 1 月发生任何类型事件的不同日子——比如 12 日和 23 日。

更一般地说,我想找到两个日期之间的所有不同日期(即整数)。我知道我可以做到:

db.collection('test').distinct('date', {
     date: {
       $gte: new Date(start),
       $lte: new Date(end),
     },
  });

但这并没有给我一天,它给了我整个日期。另一方面,使用$dayOfMonthwith projection 很容易获得两个日期之间所有日期的非明确列表。

请帮忙!

标签: node.jsmongodb

解决方案


db.collection.aggregate([
  {
    "$match": {
      "key": {
        $gte: ISODate("2020-01-01"),
        $lte: ISODate("2020-01-31")
      }
    }
  },
  {
    $group: {
      "_id": "$key"
    }
  },
  {
    $project: {
      "day": {
        $dayOfMonth: "$_id"
      },
      "_id": 0
    }
  }
])

它用于group获取唯一值。


推荐阅读