gpt4 book ai didi

gun - 当路径有多个对象时如何删除枪数据库中的数据

转载 作者:行者123 更新时间:2023-12-04 00:38:03 24 4
gpt4 key购买 nike

当我的路径包含多个对象时,如何删除数据? gun.path(' Saving_accounts').put(null) 将删除所有储蓄账户。
或者,您是否有办法在迭代具有“已删除”对象的数据时处理空错误?我正在提供完整的工作示例以尝试帮助回答。假设我用这个创建枪支数据:

// localStorage.clear();
var gun = Gun();

////////////////////////////////////////////////////////////////// create record

var saving1 = gun.put({
name: "Bank of America",
accType: "Saving",
last4: "5555",
favorite: true,
status: true,
created: "some date created"
});

var saving2 = gun.put({
name: "Bank of America",
accType: "Saving",
last4: "4123",
favorite: true,
status: true,
created: "some date created"
});

var saving_accounts = gun.get('saving_accounts')
saving_accounts.set(saving1);
saving_accounts.set(saving2);

然后我可以用这样的方式查询所有储蓄账户:
const queryMultiple = (data_path) => {
console.log("Query for: " + data_path);
gun.get(data_path).map().val((name, ID) => {
// console.log(ID);
console.log(name.name, name.accType, ID);
});
};
queryMultiple('saving_accounts');

我试图根据 gundb 问题 here 删除一条记录和 wiki gun.path('object3').put(null)但我不确定如何为我的应用程序更改它。在储蓄账户路径上,有多个储蓄账户。所以如果我想删除一个特定的储蓄账户,我会通过 id 删除它,但我认为我做错了。假设我要删除的帐户的 id 是 FesxPaup8gzuNSsLFlWXMKaL:
// delete record
const deletebyID = (data_path, qID) => {
console.log("DELETE record");
gun.get(data_path).path(qID).put(null);
};

deletebyID('saving_accounts', 'FesxPaup8gzuNSsLFlWXMKaL');

但是 .put(null)上面将使对象 FesxPaup8gzuNSsLFlWXMKaL 指向空,当我再次列出所有储蓄账户时 queryMultiple('saving_accounts');我得到一个 cannot read property name of null .

当我的路径包含多个对象时,如何删除数据?

旁注:最终我将在每个储蓄账户下为一个储蓄账户嵌套多笔交易,因此在删除错误进行的账户交易时,我将不得不做同样的事情。也希望当我删除一个储蓄账户时,它也会自动删除/清空所有账户交易,但我还没有在第一层玩数据。

最佳答案

@jtlindsey 好问题!尽管关于如何删除数据,甚至关于如何删除列表/集合/表中的项目,您都是正确的。但这里是如何获得你想要的结果:

快速解决方案:

将您的查询更改为:

const queryMultiple = (data_path) => {
console.log("Query for: " + data_path);
gun.get(data_path).map().val((name, ID) => {
if(!name){ return }
// console.log(ID);
console.log(name.name, name.accType, ID);
});
};
queryMultiple('saving_accounts');

它会起作用。为什么?因为它过滤掉了任何无效的帐户。

为什么都是空值?

GUN 中的删除操作类似于 Mac OSX、Windows 或 Linux。 null ing 告诉每台机器“将此数据放入垃圾箱/回收站”。这很有用的原因是因为它可以让您改变删除某些内容的想法,以便您以后可以根据需要恢复它。 (恢复已删除的内容/文件经常发生,但大多数人都没有想到)。
null数据对于通知也很有用!这在您设计前端网站和渲染 HTML 时非常适用。我们来看一个简单的例子:

示例

想象一下,您的用户正在他的手机上查看网站,并意识到他需要解决一些更复杂的问题,因此他使用笔记本电脑登录。在检查了笔记本电脑上的详细信息后,他决定删除该帐户。在他的“单击”操作下,您的运行代码会运行:
// delete record
const deletebyID = (data_path, qID) => {
console.log("DELETE record");
gun.get(data_path).path(qID).put(null);
};

deletebyID('saving_accounts', 'FesxPaup8gzuNSsLFlWXMKaL');

哪个是正确的。然而,如果他然后关闭他的笔记本电脑并重新拿起他的手机......他会注意到他的帐户仍然存在!!!这不是一次好的体验。但是使用 GUN 修复这很容易,因为 null通知:
gun.get(data_path).map().on((account, ID) => {
var UI = $("#account-" + ID);
if(!account){
UI.remove();
return;
}
updateUI(ID, account);
});

现在,当他们拿起电话时,它将反射(reflect)他们帐户的当前状态!他们会看到它已在所有设备上被删除,因为 null已同步到所有设备。

那有意义吗?这是否回答了您的问题?需要其他帮助吗?一如既往, https://gitter.im/amark/gunhttps://github.com/amark/gun/wiki/deletehttp://gun.js.org/ .

关于gun - 当路径有多个对象时如何删除枪数据库中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38724605/

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