You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DynamoDB如何查询与指定时间区间重叠的所有预订数据项

问题背景

我的应用用来管理用户的预订记录,每条记录都包含start_date(开始日期)和end_date(结束日期)两个字段,目前DynamoDB里的表分区设计如下:

PK                  SK              DATA
USER#1#BOOKINGS     BOOKING#1       {s: '20190601', e: '20190801'}
实现需求

我需要查出所有和指定搜索时间区间存在时间重叠的预订记录,场景示意图如下:
时间重叠查询场景示意

之前找相关解决方案的时候,只找到了能查询完全落在搜索区间内数据的实现方法,这个方法只能解决区间包含的查询场景,对应示意图如下:
区间包含查询场景示意

我在这个方案的基础上做了修改尝试,想调整逻辑实现时间重叠查询的需求,但一直没跑通可行方案。下面是我写的「区间内查询」版本代码(这个版本不是DynamoDB原生实现,后续我会把其中的isBetween函数替换成DynamoDB的BETWEEN操作符):

import { zip } from 'lodash';

const bookings = [
  { s: '20190601', e: '20190801', i: '' },
  { s: '20180702', e: '20190102', i: '' }
];

const search_start = '20190602'.split('');
const search_end   = '20190630'.split('');

// s:20190601 e:20190801 -> i:2200119900680011
for (const b of bookings) {
  b['i'] = zip(b.s.split(''), b.e.split(''))
    .reduce((p, c) => p + c.join(''), '');
}

// (start_search: 20190502, end_search: 20190905) => 22001199005
const start_clause: string[] = [];
for (let i = 0; i < search_start.length; i += 1) {
  if (search_start[i] === search_end[i]) {
    start_clause.push(search_start[i] + search_end[i]);
  } else {
    start_clause.push(search_start[i]);
    break;
  }
}
const s_index = start_clause.join('');

// (end_search: 20190905, start_search: 20190502) => 22001199009
const end_clause: string[] = [];
for (let i = 0; i < search_end.length; i += 1) {
  if (search_end[i] === search_start[i]) {
    end_clause.push(search_end[i] + search_start[i]);
  } else {
    end_clause.push(search_end[i]);
    break;
  }
}
const e_index = (parseInt(end_clause.join('')) + 1).toString();

const isBetween = (s: string, e: string, v: string) => {
  const sorted = [s,e,v].sort();
  console.info(`sorted: ${sorted}`)
  return sorted[1] === v;
}


const filtered_bookings = bookings
  .filter(b => isBetween(s_index, e_index, b.i));

console.info(`filtered_bookings: ${JSON.stringify(filtered_bookings)}`)

内容的提问来源于stack exchange,提问作者gio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.12 16:15:51