var stallone = {stallone:{first:'Sylvester',last:'Stallone',gender:'male'}};
var gibson = {gibson:{first:'Mel',last:'Gibson',gender:'male'}};
var movies = gun.get('movies')
movies.put(stallone).key('movies/action').key('movies/actors').key('movies/action/rambo') movies.put(gibson).key('movies/action').key('movies/actors').key('movies/action/roadwarrior').key('movies/comedy');
movies.get('movies/action').val();
returns {_: Object, stallone: Object, gibson: Object} Nice.
movies.get('movies/comedy').val();
returns {_: Object, stallone: Object, gibson: Object} Erm..What is Sly doing here? Not Nice!!
gun.get('movies/comedy').val();
returns {_: Object, stallone: Object, gibson: Object} same thing!!
这种行为导致了几个问题:
1)为什么要打扰创作电影?
我正在与var movies = gun.get('movies')
合作,那么为什么我要用电影制作电影呢?
在它呢? '电影'应自动加上前缀
2)即使多个键可以工作,它也不是很直观。如果我们能这样做会很好
movies.put(gibson).keys(['actors','comedy','action'])
。
注意:如果可以完成循环,我会很高兴。 但那不起作用
var gibsonKeys = ['actors','action','comedy','dieHard']
gibsonKeys.forEach(function(key){
movies.put(gibson).key('movies/'+key);
// could be gun.put(gibson).key('movies/'+ key) as well
});
作为旁注......我知道密钥只是字符串而不是数据的真实路径;)
答案 0 :(得分:2)
有几点需要注意:
movies.put(data).key('foo/bar')
使用'foo / bar'将数据放在电影和键控电影上。这是一个更新操作,而不是插入操作。因此,从put返回的内容是相同的上下文(电影),而不是某些子文档(例如,您可以使用movies.put(data).path('stallone')
访问该子文档)。
如果您想要插入记录,有点像使用表格,请尝试使用.set
- 请查看本文:https://github.com/amark/gun/wiki/graphs,其中介绍了各种数据类型的示例。
实际上,对于.set
,这可能更好:https://medium.com/@sbeleidy/a-weekend-with-gun-a61fdcb8cc5d#.49nuy86gs
键与标签不同,看起来你可能也想要这样的东西:https://github.com/PsychoLlama/labelmaker
键与键/值一样,你可以在某些东西上有多个键,但它们都指向同一个东西。上面的模块为您提供了标签,允许您使用相同的标签拍摄多个不同的东西并标记它们。这样做的方法是,它创建一个集合(见上文,将其视为无序列表),标签被键入,然后您可以遍历所有多个不同的项目。在那个清单中。那有意义吗?
允许键接受多个键虽然可能仍然是一个好主意
但是,上面的行为对于键是正确的,但似乎你想要使用的是像系统这样的标签,你可以使用上面的模块添加到GUN。