我正在探索appengine(java),根据主题,我如何使用DatastoreService获取基于Key和条件的实体?
在我的场景中,Trainer与User的关系有多对多,所以我的结构是这样的
Trainer(id, name, type, department)
User(id, name, address, is_activated)
TrainerUser(id, trainer_id, user_id)
现在要让特定培训师下的所有用户,我将通过trainer_id从TrainerUser过滤中获取所有user_id。一切都好。然后我想在Trainer下获得所有激活的用户,所以我的计划是循环获取的user_id并调用类似
的内容Query q = new Entity('User');
q.addFilter('Key', EQUAL, userId);
q.addFilter('is_activated', EQUAL, True);
但据我所知,Key不是一个可以使用addFilter()访问的真实物理属性,因此顶部的代码只会返回一个空实体。
有没有办法在实体中引用Key?对此有什么神奇的关键词?
答案 0 :(得分:0)
为什么不通过培训师过滤并且被激活?这是类似Python的伪代码:
activated_users_for_trainer = User.all().filter("trainer =", trainer_key).filter("is_actived =", True).fetch(100)
答案 1 :(得分:0)
Entity.KEY_RESERVED_PROPERTY
是您可以用于密钥的属性名称。
用于引用实体密钥的保留属性名称。该字符串可用于按实体键本身进行过滤和排序。
所以要按键过滤
query.addFilter(Entity.KEY_RESERVED_PROPERTY, FilterOperator.EQUAL, myKey);
答案 2 :(得分:0)
它更容易和最优化我认为通过id获取实体然后如果存在验证是否is_activated,则数据存储更快且更便宜获取ID实体,下一次验证仅在内存上运行。 As in this responses