Прежде всего, создайте коллекции и их содержимое так, как вы их указали. Мы добавим второго пользователя.
db._create("user")
db._create("tags")
db._create("dishes")
db.user.save({_key: 'user1'})
db.user.save({_key: 'user2'})
db.tags.save({_key: 'sweet'})
db.tags.save({_key: 'chocolate'})
db.tags.save({_key: 'vanilla'})
db.tags.save({_key: 'spicy'})
db.dishes.save({_key: 'item1'})
db.dishes.save({_key: 'item2'})
db.dishes.save({_key: 'item3'})
Теперь позволяет создавать краевые коллекции со своими краями:
db._createEdgeCollection("userPreferences")
db._createEdgeCollection("dishTags")
db.userPreferences.save("user/user1", "tags/sweet", {score: 4})
db.userPreferences.save("user/user1", "tags/chocolate", {score: 11})
db.userPreferences.save("user/user2", "tags/sweet", {score: 27})
db.userPreferences.save("user/user2", "tags/vanilla", {score: 7})
db.dishTags.save("tags/sweet", "dishes/item2", {score: 4});
db.dishTags.save("tags/sweet", "dishes/item3", {score: 7})
db.dishTags.save("tags/chocolate", "dishes/item2", {score: 2})
db.dishTags.save("tags/vanilla", "dishes/item3", {score: 3})
db.dishTags.save("tags/spicy", "dishes/item1", {score: 666})
Наши отношения так:
user-[userPreferences]->tags-[dishTags]->dishes
выяснить, что user1
любит можно сделать с этим запросом:
FOR v, e IN 1..2 OUTBOUND "user/user1" userPreferences, dishTags
RETURN {item: v, connection: e}
если вы теперь хотите, чтобы найти все блюда, которые user1
нравятся лучше:
FOR v, e IN 2..2 OUTBOUND "user/user1" userPreferences, dishTags
FILTER e.score > 4 RETURN v
Мы фильтр для атрибута score
.
Теперь мы хотим, чтобы найти другой пользователь, который имеет то же предпочтение, как user1
делает:
FOR v, e IN 2..2 ANY "user/user1" userPreferences RETURN v
Заходит в ANY
направления (вперед и назад), но только заинтересованы в коллекции userPreferences
края, еще- ..2 также будет использовать посуду. То, как мы это делаем сейчас. мы возвращаемся в пользовательские коллекции, чтобы найти пользователей с аналогичными предпочтениями.
Независимо от того, является ли создание Foxx-сервиса хорошим вариантом, зависит от личных предпочтений. Foxx отлично подходит, если вы хотите комбинировать & результаты фильтрации на стороне сервера, поэтому общение с клиентами меньше. Вы также можете использовать его, если хотите разместить приложение скорее на микросервисах, чем на db-запросах. Тогда ваше приложение может оставаться свободным от кода, специфичного для базы данных, - это всего лишь operates with the microservice. Там могут быть случаи, когда Foxx
В общем, нет «правильного» способа - существуют разные способы, которые вы можете предпочесть выше других из-за производительности, чистоты кода, масштабируемости и т. Д.
Я делаю двигатель рекомендации по еде с arangodb, хочу связаться и поговорить об этом? –
Конечно! Пожалуйста, напишите мне на stalemett по gmail. –