Javascript Firebase数据结构思想

Javascript Firebase数据结构思想,javascript,firebase,firebase-realtime-database,nosql,Javascript,Firebase,Firebase Realtime Database,Nosql,我在POS系统中工作,使用Firebase作为后端。我需要做的报告之一是“销售最多/较少的产品” 我有这样的结构/sales/: "1234": { "date": 1234567890, // timestamp "products": { "coca-cola-clasica-355-ml": { "quantity": 3, "salesPrice": 500, "costPrice":

我在POS系统中工作,使用Firebase作为后端。我需要做的报告之一是“销售最多/较少的产品”

我有这样的结构
/sales/

"1234": {
    "date": 1234567890, // timestamp
    "products": {
        "coca-cola-clasica-355-ml": {
            "quantity": 3,
            "salesPrice": 500,
            "costPrice": 400
        },
        "coca-cola-clasica-600-ml": {
            "quantity": 6,
            "salesPrice": 900,
            "costPrice": 700
        }
    },
    "subtotal": 6400,
    "total": 6400
},
"5678": {
    "date": 1234567890, // timestamp
    "products": {
        "taqueritos-chile-picante": {
            "quantity": 2,
            "salesPrice": 100,
            "costPrice": 80
        },
        "coca-cola-clasica-600-ml": {
            "quantity": 4,
            "salesPrice": 900,
            "costPrice": 700
        }
    },
    "subtotal": 200,
    "total": 200
}
和/产品/:

{
    "coca-cola-clasica-355-ml": {
        "costPrice": 350,
        "name": "Coca Cola Clasica 355 ml",
        "salesPrice": 500,
        "stock": 99,
        "supplier": "femsa-coca-cola",
        "tax": false,
    },
    "coca-cola-clasica-600-ml": {
        "costPrice": 700,
        "name": "Coca Cola Clasica 600 ml",
        "salesPrice": 900,
        "stock": 99,
        "supplier": "femsa-coca-cola",
        "tax": false,
    },
    "taqueritos-chile-picante": {
        "costPrice": 80,
        "name": "Taqueritos Chile Picante",
        "salesPrice": 100,
        "stock": 500,
        "supplier": "dinant",
        "tax": true
    }
}
因此,如果我现在必须获得“最畅销的产品”,我必须迭代所有的销售,并在每次发现产品时添加数量,然后订购结果并获得最畅销的产品,这太糟糕了

我有两个解决方法:

  • /products/
    中添加一个属性,如“soldTimes”,并在每次销售产品时添加数量
  • 创建第三个实体调用,如
    soldProducts
    ,并在客户每次购买产品时计算每一个实体的销售产品数量
  • 这两种方法中有哪一种有效?我在Firebase里遗漏了什么


    感谢您的帮助。

    在NoSQL中,您通常会按照应用程序使用数据的方式对数据进行建模。因此,如果你的应用程序需要有一个最畅销产品的列表,你应该考虑将该列表存储在数据库中。
    productLeaderboard: {
        coca-cola-clasica-355-ml: {
            totalQuantity: 3,
            totalSalesPrice: 500,
            totalCost: 400,
            totalProfit: 100
        },
        ...
    }
    
    现在,要查找最畅销的产品,您只需执行以下操作:

    ref.child('productLeaderboard').orderByChild('totalQuantity').limitToFirst(3).on(...