2
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')为什么我必须再次创建带有“电影”的密钥?'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
});

作为旁注......我知道键只是字符串,而不是数据的真实路径;)

4

1 回答 1

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
键与键/值一样,您可以在某物上拥有多个键,但它们都指向同一事物。上面的模块为您提供了标签,它允许您获取多个不同的东西并用相同的标签标记它们。在引擎盖下,这样做的方式是它创建了一个集合(见上文,将其视为一个无序列表),标签被键入,然后您可以遍历所有多个不同的项目在那个列表中。那有意义吗?尽管允许 key 接受多个 key 可能仍然是一个好主意

但是,上面的行为对于 key 是正确的,但看起来您想要使用的是一个类似系统的标签,您可以使用上述模块将其添加到 GUN。

于 2016-06-11T07:46:55.360 回答