对枪DB

时间:2016-06-11 07:43:51

标签: gun gundb

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
});

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

1 个答案:

答案 0 :(得分:2)

Mark Nadal回答

有几点需要注意:

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。