Я наткнулся на GunDB и начал играть с ним (версия 0.2020.301
), чтобы посмотреть, как он обрабатывает мою структуру данных. При запросе данных я столкнулся со странной ошибкой.
Данные:
var person = { name: "Bob", id: "person1" }
var event = {
id: "event1",
name: "Festival",
startDate: new Date("2020-02-20"),
endDate: new Date("2020-02-30"),
location: "New York"
}
var event2 = {
id: "event2",
name: "Race",
startDate: new Date("2020-03-27"),
endDate: new Date("2020-03-29"),
location: "London"
}
Структура:
gun.get(person.id).put(person);
gun.get(event.id).put(event);
gun.get(event2.id).put(event2);
gun.get(event.id)
.get("people")
.set(person);
gun.get(event2.id)
.get("people")
.set(person);
gun.get(person.id)
.get("events")
.set(event);
gun.get(person.id)
.get("events")
.set(event2);
Примеры использования:
Учитывая, что я нахожусь в узле Bob
,
- Показать все имена событий
- Показать все события, которые произошли в
New York
Кому Начните с того, что я просто хочу посмотреть, смогу ли я найти все события, на которые пошел Боб:
gun.get(person.id)
.path("events")
.map()
.once(console.log);
Вывод:
{ _: { '#': 'k7htdlma06c5sVnIukcZRil' } } 'k7htdlma06c5sVnIukcZRil'
{ _: { '#': 'k7htdlma0agTZMyZAqNUrcG' } } 'k7htdlma0agTZMyZAqNUrcG'
Я понимаю, что Gun ссылается на свой собственный идентификатор, скорее чем объект, в set
. Структура данных более или менее соответствует ожиданиям. Как я могу перечислить весь объект здесь?
Далее, запрос location
. map()
, кажется, правильная функция для работы, но я не уверен, как ее использовать. Я не нашел документацию явно очевидной, поэтому после осмотра inte rnet я наткнулся на этот вопрос StackOverflow . Основываясь на принятом ответе, я подозреваю, что должен выполнить этот запрос:
gun.get(person.id)
.path("events")
.map(e => e.location === "New York")
.once(console.log) //.on(console.log) and .val(console.log) yield the same error
При выполнении я получаю следующий вывод:
<projectPath>/node_modules/gun/gun.js:1859
Gun.log.once("mapfn", "Map functions are experimental, their behavior and API may change moving forward. Please play with it and report bugs and ideas on how to improve it.");
^
TypeError: Gun.log.once is not a function
at Gun.chain.map (<projectPath>/node_modules/gun/gun.js:1859:12)
at Object.<anonymous> (<projectPath>/test.js:66:6)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
Кроме моего вопроса после первого запроса, я Хотелось бы знать следующее:
- Правильно ли я настраиваю структуру?
- объекты обрабатывают данные, а Gun обрабатывает отношения:
gun.get(event.id).get("people").set(person)
gun.get(person.id).get("events").set(event)
- Am I правильно запрашивать?
- Как я могу получить желаемые результаты?