Смущен ключами в пистолете БД
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 ответ
Ответ Марк Надаль
Несколько вещей, чтобы отметить:
movies.put(data).key('foo/bar')
помещает данные о фильмах и вводит фильмы с помощью 'foo/bar'. Это операция обновления, а не операция вставки. Таким образом, то, что возвращается из пут - это тот же контекст (фильмы), а не какой-то поддокумент (вы можете получить доступ к этому поддокументу с помощью movies.put(data).path('stallone')
например). Если вы хотите вставить запись, вроде таблицы, попробуйте использовать .set
- проверьте эту статью: https://github.com/amark/gun/wiki/graphs которой рассматриваются некоторые примеры различных типов данных.
На самом деле, для .set
это, вероятно, лучше: https://medium.com/@sbeleidy/a-weekend-with-gun-a61fdcb8cc5d
Ключи отличаются от тегов, также похоже, что вы, вероятно, хотите что-то вроде этого: https://github.com/PsychoLlama/labelmaker.
Ключи, как в ключе / значении, могут иметь несколько ключей на что-то, но все они указывают на одно и то же. Вышеприведенный модуль предоставляет вам теги, которые позволяют вам взять несколько разных вещей и пометить их все одним и тем же тегом. Под капотом способ, которым это делается, состоит в том, что он создает набор (см. Выше, думайте о нем как о неупорядоченном списке), к которому привязан тег, и затем вы можете перебирать все различные элементы, которые в этом списке. Имеет ли это смысл? Разрешение ключа принимать несколько ключей, хотя, вероятно, все еще хорошая идея, хотя
Тем не менее, приведенное выше поведение является правильным для ключа, но кажется, что вы хотите использовать систему типа тега, которую вы можете добавить в GUN с помощью вышеуказанного модуля.