当路径有多个对象时,如何删除 gun DB 中的数据
How do I delete data in gun DB when path has multiple objects
当我的路径包含多个对象时,如何删除数据? gun.path('saving_accounts').put(null) 将删除所有储蓄账户。
或者,在迭代具有 'deleted' 对象的数据时,您是否有办法处理空错误?我正在提供完整的示例来帮助回答。假设我用这个创建枪支数据:
// 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 and 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
.
当我的路径包含多个对象时,如何删除数据?
旁注:最终我会在每个储蓄账户下嵌套一个储蓄账户的多笔交易,因此在删除错误进行的账户交易时我将不得不做同样的事情。也希望当我删除一个储蓄账户时,它会自动 deletes/nulls 所有这些账户交易,但我还没有忘记在第一层玩数据。
@jtlindsey 好问题!尽管关于如何删除数据,甚至关于如何删除 list/collection/table 中的项目,您都是正确的。但这里是如何获得你想要的结果:
快速解决方案:
将您的查询更改为:
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 告诉每台机器 "Put this data in the trash/recycle bin"。这很有用的原因是因为它可以让您改变主意删除某些内容,因此您可以在以后根据需要恢复它。 (恢复已删除的 content/files 经常发生,但大多数人都没有考虑过)。
null
数据对于通知也很有用!这在您设计前端网站和渲染时非常适用 HTML。让我们来看一个简单的例子:
例子
假设您的用户正在他的 phone 上查看网站,并意识到他需要解决一些稍微复杂一点的问题,因此他使用笔记本电脑登录。在查看笔记本电脑上的详细信息后,他决定删除该帐户。在他的 "click" 操作下,您的 运行 代码变为 运行:
// delete record
const deletebyID = (data_path, qID) => {
console.log("DELETE record");
gun.get(data_path).path(qID).put(null);
};
deletebyID('saving_accounts', 'FesxPaup8gzuNSsLFlWXMKaL');
这是正确的。但是,如果他随后关闭他的笔记本电脑并选择他的 phone 备份...他会发现他的帐户仍然存在!!!这不是一个好的体验。但是使用 GUN 修复这很容易,因为 null
通知:
gun.get(data_path).map().on((account, ID) => {
var UI = $("#account-" + ID);
if(!account){
UI.remove();
return;
}
updateUI(ID, account);
});
现在,当他们拿起 phone 时,它会反映出他们帐户的当前状态!他们会看到它已在所有设备上删除,因为 null
已同步到所有设备。
这有意义吗?这是否回答了您的问题?需要其他帮助吗?一如既往,https://gitter.im/amark/gun and https://github.com/amark/gun/wiki/delete and http://gun.js.org/ .
当我的路径包含多个对象时,如何删除数据? gun.path('saving_accounts').put(null) 将删除所有储蓄账户。 或者,在迭代具有 'deleted' 对象的数据时,您是否有办法处理空错误?我正在提供完整的示例来帮助回答。假设我用这个创建枪支数据:
// 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 and 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
.
当我的路径包含多个对象时,如何删除数据?
旁注:最终我会在每个储蓄账户下嵌套一个储蓄账户的多笔交易,因此在删除错误进行的账户交易时我将不得不做同样的事情。也希望当我删除一个储蓄账户时,它会自动 deletes/nulls 所有这些账户交易,但我还没有忘记在第一层玩数据。
@jtlindsey 好问题!尽管关于如何删除数据,甚至关于如何删除 list/collection/table 中的项目,您都是正确的。但这里是如何获得你想要的结果:
快速解决方案:
将您的查询更改为:
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 告诉每台机器 "Put this data in the trash/recycle bin"。这很有用的原因是因为它可以让您改变主意删除某些内容,因此您可以在以后根据需要恢复它。 (恢复已删除的 content/files 经常发生,但大多数人都没有考虑过)。
null
数据对于通知也很有用!这在您设计前端网站和渲染时非常适用 HTML。让我们来看一个简单的例子:
例子
假设您的用户正在他的 phone 上查看网站,并意识到他需要解决一些稍微复杂一点的问题,因此他使用笔记本电脑登录。在查看笔记本电脑上的详细信息后,他决定删除该帐户。在他的 "click" 操作下,您的 运行 代码变为 运行:
// delete record
const deletebyID = (data_path, qID) => {
console.log("DELETE record");
gun.get(data_path).path(qID).put(null);
};
deletebyID('saving_accounts', 'FesxPaup8gzuNSsLFlWXMKaL');
这是正确的。但是,如果他随后关闭他的笔记本电脑并选择他的 phone 备份...他会发现他的帐户仍然存在!!!这不是一个好的体验。但是使用 GUN 修复这很容易,因为 null
通知:
gun.get(data_path).map().on((account, ID) => {
var UI = $("#account-" + ID);
if(!account){
UI.remove();
return;
}
updateUI(ID, account);
});
现在,当他们拿起 phone 时,它会反映出他们帐户的当前状态!他们会看到它已在所有设备上删除,因为 null
已同步到所有设备。
这有意义吗?这是否回答了您的问题?需要其他帮助吗?一如既往,https://gitter.im/amark/gun and https://github.com/amark/gun/wiki/delete and http://gun.js.org/ .