有没有人知道CQEngine是否可以在其他对象中查询对象?我希望能够查询用户,订单和产品。
可以使用CQEngine完成,还是需要展平对象?
public class User {
public List<Orders> orders;
}
public class Orders {
public List<Products> products;
}
public class Products {
public String name;
}
答案 0 :(得分:3)
是的,您只需要定义一个CQEngine属性,该属性将从您要搜索的嵌套对象中返回值。
例如,此属性将检索由特定用户放置的订单中包含的每个产品的名称。
<link href="https://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css" rel="stylesheet"/>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<div id="img-wrapper">
<div class="ui-resizable-handle ui-resizable-nw" id="nwgrip"></div>
<div class="ui-resizable-handle ui-resizable-ne" id="negrip"></div>
<div class="ui-resizable-handle ui-resizable-sw" id="swgrip"></div>
<div class="ui-resizable-handle ui-resizable-se" id="segrip"></div>
<div class="ui-resizable-handle ui-resizable-n" id="ngrip"></div>
<div class="ui-resizable-handle ui-resizable-s" id="sgrip"></div>
<div class="ui-resizable-handle ui-resizable-e" id="egrip"></div>
<div class="ui-resizable-handle ui-resizable-w" id="wgrip"></div>
<img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=350%C3%97150&w=350&h=150">
</div>
您可以选择在此属性上添加索引,以加快查询。
以下是设置static final Attribute<User, String> PRODUCT_NAMES_ORDERED = new MultiValueAttribute<User, String>() {
public Iterable<String> getValues(User user, QueryOptions queryOptions) {
return user.orders.stream()
.map(order -> order.products).flatMap(Collection::stream)
.map(product -> product.name)::iterator;
}
};
用户的示例,其中每个用户都有多个订单,每个订单都有多个产品。这些产品是您在电影院看到的小吃。它会搜索集合中订购“Snickers Bar”的用户。
IndexedCollection
BTW我是CQEngine的作者,你可以在CQEngine site找到这个例子的完整来源。 (我刚刚添加了这个作为新的例子!)