当路径包含多个对象时,如何删除数据? 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指向null,当我使用queryMultiple('saving_accounts');
再次列出所有储蓄帐户时,我会得到cannot read property name of null
。
当路径包含多个对象时,如何删除数据?
旁注:最终我将为每个储蓄账户下的储蓄账户嵌套多笔交易,因此在删除错误的账户交易时我将不得不做同样的事情。同样希望当我删除一个储蓄账户时,它会自动删除/取消所有账户交易,但我还没有过去在第一层玩数据。
答案 0 :(得分:6)
@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
告诉每台机器“将此数据放入垃圾箱/回收站”。这有用的原因是因为它可以让你改变主意去删除某些东西,所以如果你愿意,你可以稍后恢复它。 (恢复已删除的内容/文件很多,但大多数人都没有考虑过。)
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');
哪个是对的。然而,如果他然后关闭他的笔记本电脑并拿回他的手机......他会注意到他的帐户仍在那里!这不是一个好的经历。但是由于null
通知:
gun.get(data_path).map().on((account, ID) => {
var UI = $("#account-" + ID);
if(!account){
UI.remove();
return;
}
updateUI(ID, account);
});
现在当他们拿起手机时,它会反映出他们帐户的当前状态!他们会看到它已在所有设备上删除,因为null
已同步到所有设备。
这有意义吗?这是你的答案吗?需要帮助吗?与往常一样,https://gitter.im/amark/gun和https://github.com/amark/gun/wiki/delete以及http://gun.js.org/。