node.js - MongoDB - 营业时间,按当天排序

标签 node.js mongodb express mongoose aggregation-framework

我正在尝试重新创建位置列表上显示的 Google“营业时间”下拉列表。

enter image description here

营业时间数组如下所示:

[
    {id: 5d991d1208ac396803a992ee, day: 'sunday', open: 560, close: 1050},
    {id: 5d991d1208ac396803a992ef, day: 'monday', open: 560, close: 1050},
    {id: 5d991d1208ac396803a992eg, day: 'tuesday', open: 560, close: 1050},
    {id: 45d991d1208ac396803a992e, day: 'wednesday', open: 560, close: 1050},
    {id: 5d991d1208ac396803a992eh, day: 'thursday', open: 560, close: 1050},
    {id: 5d991d1208ac396803a992eI, day: 'friday', open: 560, close: 1050},
    {id: 5d991d1208ac396803a992eG, day: 'saturday', open: 560, close: 1050},
]

所以,如果当天是星期二,我想返回一个像这样的排序数组:

[
    {id: 5d991d1208ac396803a992eg, day: 'tuesday', open: 560, close: 1050},
    {id: 45d991d1208ac396803a992e, day: 'wednesday', open: 560, close: 1050},
    ....
]

我正在使用 mongoose 和 MongoDB。

更新 ID 是由 MongoDB 生成的,因此我无法对它们进行排序或匹配。

最佳答案

使用扩展运算符进行切片和连接:

// needs the day of the week
// starting from Sunday as 0 and saturday as 6 since getDay()
// starts from 0
const currentDay = new Date().getDay() // 0, 1, 2, 3, 4, 5,  or 6

// here's your function

const getSortedArray = (arr) => [
  ...arr.slice(currentDay),
  ...arr.slice(0, currentDay)
]

// example

const days = [{
    id: '5d991d1208ac396803a992ee',
    day: 'sunday',
    open: 560,
    close: 1050
  },
  {
    id: '5d991d1208ac396803a992ef',
    day: 'monday',
    open: 560,
    close: 1050
  },
  {
    id: '5d991d1208ac396803a992eg',
    day: 'tuesday',
    open: 560,
    close: 1050
  },
  {
    id: '45d991d1208ac396803a992e',
    day: 'wednesday',
    open: 560,
    close: 1050
  },
  {
    id: '5d991d1208ac396803a992eh',
    day: 'thursday',
    open: 560,
    close: 1050
  },
  {
    id: '5d991d1208ac396803a992eI',
    day: 'friday',
    open: 560,
    close: 1050
  },
  {
    id: '5d991d1208ac396803a992eG',
    day: 'saturday',
    open: 560,
    close: 1050
  },
]

// ensure order of days
const daysSorted = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']
  .map(day => days.filter(el => el.day === day)[0])

console.log(getSortedArray(daysSorted))

关于node.js - MongoDB - 营业时间,按当天排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59044505/

相关文章:

javascript - 如何对 APE(或其他 Comet 服务器)进行基准测试?

python - 如何在 Mongoengine 上创建抽象模型?

javascript - 使用 Node Passport 和 Google Auth 限制登录到特定域

node.js - Mongoose - 如何用每条记录一个值更新许多特定记录?

c# - 以编程方式从命令提示符启动 Node js 脚本

java - MongoDB:如何测量数据库的延迟或其他参数

node.js - MongoDB - 找到至少一个数组值丢失的地方

javascript - 在ExpressJS响应中返回异步等待try/catch引发的错误

mysql - 从 sequelize 查询返回一个值

javascript - 我想从传递到 url 的 req 部门 ID 中获取员工的部门数据