gpt4 book ai didi

javascript - 脚本数据库 : Custom ID for record for quick bulk updating?

转载 作者:行者123 更新时间:2023-11-28 16:07:24 25 4
gpt4 key购买 nike

我有 20,000 条产品信息记录 ScriptDB,我希望每小时更新一次当前价格/库存信息。就目前情况而言,我在设计一些不首先达到执行限制的东西时遇到了麻烦。

下载的stockfile是可定制的,目前我将其作为JSON,例如:

[
{"sku":"MYSKU1","price":14.99,"qty":2},
{"sku":"MYSKU2","price":22.99,"qty":25},
{"sku":"MYSKU3","price":91.99,"qty":31}
]

目前我做的事情如下:

var prod_feed = UrlFetchApp.fetch("https://www.site.com/myJSONfile").getContentText();
var prod_data = JSON.parse(prod_feed);
var prod_qty = 0, i = 0;
var prod_code = "";
var prod_price = "";

var db = ScriptDb.getMyDb();
var result_array = [];
var result_current = {};
var time_obj = dbDateObject();

for(i = 0; i < prod_data.length; i++) {

var result = db.query({sku: prod_data[i]["sku"]}).next(); // result will be null if no match

if (!result) {
// No match, create new object with this SKU for insertion
result = {};
result["sku"] = prod_data[i]["sku"];
}

result["qty"] = prod_data[i]["qty"];
result["price_default"] = prod_data[i]["price"];
result["last_product_update"] = time_obj;
result_array[i] = result;

}

var results = db.saveBatch(result_array, false);

我可以通过这种方式运行大约 2,500 条记录,并在达到时间限制之前保存它们。

有什么办法可以直接使用SKU作为记录ID吗?那么实际上就只有 3 行代码...

var prod_feed = UrlFetchApp.fetch("https://www.site.com/myJSONfile").getContentText();
var prod_data = JSON.parse(prod_feed);
var results = db.saveBatch(prod_data, false);

如果没有,有什么明显的方法可以提高效率吗?

谢谢!

最佳答案

Is there any way I can use the SKU directly as the record ID?

遗憾的是,没有。 每个 ScriptDb 对象都有一个 id,由系统在存储时分配,它是一个不透明、不可变的字符串值。 ( ScriptDb documentation .)

但是,您可以将产品存储在单个对象中,并将 SKU 用作对象属性,而不是对象数组。您仍然需要循环访问输入,但您只会调用 ScriptDB 服务 2 次,而不是数千次。

试试这个:

  var prod_feed = UrlFetchApp.fetch("https://www.site.com/myJSONfile").getContentText();
var prod_data = JSON.parse(prod_feed);

var db = ScriptDb.getMyDb();
var result = db.query({type: "products"});
var products = {};
if (result.hasNext()) {
// Projects database object already exists
products = result.next();
}
else {
// Not found, so create the Projects database object.
var product_data = new Object();
products = {type: "products", data: product_data};
}

var time_obj = dbDateObject();

for (var i = 0; i < prod_data.length; i++) {

if (!(prod_data[i]["sku"] in products.data)) {
// No match, create new object with this SKU for insertion
products.data[prod_data[i]["sku"]] = {};
}

// Update info for this item
var item = products.data[prod_data[i]["sku"]];
item.qty = prod_data[i].qty;
item.price_default = prod_data[i].price;
item.last_product_update = time_obj;
}

var results = db.save(products);

这是调试器的屏幕截图,显示了从 ScriptDb 检索“产品”对象时的样子。如果您可以稍微调整一下输入数据,您也许能够获得您梦想的一次性写入!

Debugger Screenshot of 'products' object

注意:我像您一样使用了 priceprice_default...但我怀疑这是一个拼写错误。

关于javascript - 脚本数据库 : Custom ID for record for quick bulk updating?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14358681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com