Javascript MongoDB模式设计-庞大列表

Javascript MongoDB模式设计-庞大列表,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,我想知道在我的mongoDB中存储数据的最佳方式是什么,例如,餐馆的订单 所以,首先我需要一个“订单”集合 为了在服务员之间同步数据,还需要进行大量读取,因此我不希望在同一列表中存储已完成(已付款)的订单和仍在打开的订单 所以我提出了一个“订单”集合,它有两个数组字段:“当前”和“历史”。 在当前版本中,我将存储所有尚未付款的订单(需要通过所有服务员同步),在“历史记录”中,我将存储所有已关闭且仅需要经理或想要查看数据的人访问的订单 这样我就可以最大限度地减少访问时间和发送数据量 这是一种正确的

我想知道在我的mongoDB中存储数据的最佳方式是什么,例如,餐馆的订单

所以,首先我需要一个“订单”集合

为了在服务员之间同步数据,还需要进行大量读取,因此我不希望在同一列表中存储已完成(已付款)的订单和仍在打开的订单

所以我提出了一个“订单”集合,它有两个数组字段:“当前”和“历史”。 在当前版本中,我将存储所有尚未付款的订单(需要通过所有服务员同步),在“历史记录”中,我将存储所有已关闭且仅需要经理或想要查看数据的人访问的订单

这样我就可以最大限度地减少访问时间和发送数据量

这是一种正确的最佳实践方式吗

或者我应该将所有内容都存储在一个列表中,然后执行按时间或类似方式排序的查询,并限制我发回的文档数量

编辑:


在此集合中,我希望为多家餐厅保存订单。因此,我可以为每个餐厅使用此集合中的一个文档,并将订单嵌入其中,或者将此集合中的所有订单放在同一级别上,然后每个订单都会有一个restaurantId,因为订单集合表示单个餐厅,所以它不会包含所有订单的记录,每个文档看起来像:

{
    _id:{}
    waiter: 'Sammaye',
    table: 9,
    items: [
        {id:9,qty:1,cooked:false}
    ],
    billed: false
}
所有需要了解等待发出的订单的服务员只需从该集合中获取所有已开票的订单文档即可

如果您在
账单
上放置索引,这就足够了

使用您所说的另一种方法可能会导致问题,例如,它是集合中存储所有订单的一个文档。我可以想象,随着时间的推移,这份文件会变得相当大

使用内存中的运算符(
$push
$pull
等)可能会使文档上的操作变慢

它还可能在数据库中创建碎片,因为这些是随时间不断增长的未绑定数组,这也会降低性能


与将每份订单存储为记录相比,您的方法也不会产生任何优势,除非您可以一次性获得所有待处理订单,但是,配置批量大小时,将所有订单存储为单独的文档时,您可能会非常接近这一点。

在此集合中,我将存储多家餐厅的订单,不仅仅是一家餐厅。因此,如果我有一段时间的订单,例如一次收集10000份订单,那么这不会是一个问题,而要获得尚未付款的订单,我必须根据账单和restaurantId字段进行扫描。我可以在这里使用复合索引,这在性能方面还可以吗?@deloki是的,应该非常快,索引应该非常轻,只有2个字段