javascript - Firestore数据结构: Storing An Order in Firestore

标签 javascript firebase google-cloud-firestore

我需要在 Firestore 中存储“订单”。它基本上是几行零件编号、描述、数量和价格。我最初的想法是将每个订单存储为一个文档,其中每个 line/row/lineItem 都是一个数组。

考虑到搜索/规模,是否推荐这样做?或者,“订单”的每个行项目是否应该是顶级集合(“order1”)的单独文档?

PART1A    a desc of part1a    3    13.95
PART2B    aanother descrip    7    9.99

更新:以下是我的解决方案。我花了(浪费)很长时间思考如何.then更新我的 db.collection("users").doc(uid).collection("orders")。一个小时后,我明白根本没有理由这样做。我已经在 db.collection("orders").doc() 中捕获了 uid,并且可以快速查询该 uid 以提取用户订单。

    ordersPageSaveButton.addEventListener('click', function(evt) {
        var batch = db.batch();
        var ordersRef = db.collection("orders").doc();
        var itemRows = parentEl.querySelectorAll(".selected-item-row");
        var name;
        var description;
        var quantity;
        var price;
        var indx;
        var obj = {};
        //order name would be nice
        obj.updated = Date.now();
        obj.owner = firebase.auth().currentUser.uid;
        obj.stage = "saved";
        for (var i = 0; i < itemRows.length; i++) {
            name = itemRows[i].querySelector(".product-container-item-name-wrapper").innerHTML.toString().toLowerCase();
            description = itemRows[i].querySelector(".product-container-description-row").innerHTML.toString().toLowerCase();
            quantity = Number(itemRows[i].querySelector(".product-container-qty-input").value);
            price = itemRows[i].querySelector(".product-container-unit-price-wrapper").innerHTML;
            price = parseFloat(price.replace(/,/g, ''));
            indx = itemRows[i].querySelector(".product-container-row-number-wrapper").innerHTML;
            obj[name] = {
            indx:indx,
            description:description,
            quantity:quantity,
            price:price};
            batch.set(ordersRef, obj);
        }
        // Commit the batch
        batch.commit().then(function () {
            console.log("success");
        }).catch(function(err) {
            console.error(err);
        });
    });

最佳答案

看起来首先提到的结构就是正确的选择。使用订单名称作为键 (collection/$ordername),使用描述、数量和价格作为值。

PART1A
    description: "This is desc of part1a"
    quantity: 3
    price: 13.95

这样您就可以按任何值和名称进行排序。

关于javascript - Firestore数据结构: Storing An Order in Firestore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49480604/

相关文章:

node.js - 使用环境变量对 Firebase Admin SDK 进行身份验证

google-cloud-firestore - 云函数上下文参数返回未定义

javascript - 如何在 Firestore 中使文档字段 = map ?

javascript - Chrome WebAPIchrome.webRequest.onBeforeSendHeaders 不更改传出请求中的参数

Javascript冲突导致页面无法在ie中显示

javascript - agent.add() 不起作用,尽管 console.log() 起作用

ios - Firebase Crash pod 破坏了 iOS 上的设备旋转

javascript - 使用内联 JavaScript 从 cdn 导入第三方库

javascript - 在 AWS Lambda 中使用 Async/Await 写入 S3 存储桶

javascript - 错误类型错误 : Cannot read property '0' of null | Angular 7