这主要是一个设计/效率问题,但我想看看在 neo4j 中是否有一种首选的方法来处理这个问题,而不是在 sql db 中如何处理。
现在我有 2 个模型 -user
和event
. 我也有关系,user
并event
表示他们将参加此次活动。我想找出代表活动管理员的最佳方式。换句话说,我希望能够查询由用户管理的事件。
一种方法是admin_of
在 user 和event
. 另一种方法是创建参与关系的管理属性。就像是admin: true
admin_of
查询似乎很简单,但向数据库添加了另一种关系。以后它也可以处理多管理员。
后一种方式可以通过我认为这样的方式进行查询:(来自文档)EnrolledIn.where(since: 2002)
所以我的搜索将包括admin: true
. 但是我不确定如何链接它,因为我希望它只是朋友活动。其他where
查询通常基于节点而不是关系的属性。
后一种方法似乎是首选方法,但查询它的正确方法是什么?还是第一种方法更简单,即使它增加了额外的关系?
更新: 我想出了这样的东西
result = Event.query_as(:event).match("event<-[invite: INVITED]-(user: User)<-[:FRIENDS_WITH]-(user)").where(invite: {admin: /true/}).pluck(:event)
基于详细的查询
https://github.com/neo4jrb/neo4j/wiki/Search-and-Match
更新 2
我现在有这个,但没有匹配。开始剖析我的查询出了什么问题的最佳方法是什么?
current_user.friends.events.query_as(:event).match("event<-[invite]-(user: User)<-[friends_with]-(user)").where(invite: {admin: true}, event: {detail: 'property'}).pluck(:event)
我的用户模型有
has_many :both, :events, model_class: 'Event', rel_class: 'Invite'
我的事件模型有
has_many :both, :users, model_class: 'User', rel_class: 'Invite'
我的邀请模型有
from_class Event
to_class User
type 'invited'