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

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

在服务员之间同步数据时,还需要进行大量读取,所以我不想存储已完成(已付款)的订单和仍在同一列表中打开的订单。

因此,我想出了一个具有2个数组字段的“ Orders”集合:“ current”和“ history”。
目前,我将存储所有仍未付款的订单(需要通过所有服务员进行同步),而在“历史记录”中,我将存储所有已关闭且仅需要管理人员或想要查看数据的人员访问的内容。

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

这将是正确的最佳实践方法吗?

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

编辑:

在此收藏中,我希望保存多家餐厅的订单。因此,我可以在每个餐厅中使用此文档中的一个文档,然后在其中嵌入订单,或者将此餐厅中的所有订单放在同一级别,然后每个订单都将包含一个restaurantId

最佳答案

由于订单集合代表一个餐厅,因此它不会包含所有订单的记录,每个文档看起来像:

{
    _id:{}
    waiter: 'Sammaye',
    table: 9,
    items: [
        {id:9,qty:1,cooked:false}
    ],
    billed: false
}


所有需要了解等待外出订单的服务员都将从该集合中获得所有包含billed false的订单文档。

如果在billed上放置索引,这应该足够好。

使用您说的另一种方法可能会引起问题,例如,它是存储所有订单的集合中的一个文档。我可以想象一下,文件会变得很大。

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

由于它们是随时间推移不断增长的未绑定数组,因此也会在数据库中创建碎片,这也会降低性能。

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

关于javascript - MongoDB模式设计-庞大的 list ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18696556/

10-12 13:05