Products : {
id : 1
}
Customer : {
id : 2
}
列表与LT;> customerProductIds = new Arraylist();
我想查询产品和客户,如果是,则返回组合列表作为对象,检查列表中是否有客户ID和产品ID。
注意 :我们在两个集合之间没有任何连接。
我正在使用的查询是
LookupOperation lookupOperation = LookupOperation.newLookup().from("Product")
.localField("_id").foreignField(" customer._id").as("entity");
AggregationResults<Object> entities =
this.template.aggregate(
Aggregation.newAggregation(lookupOperation,
Aggregation.match(Criteria.where("id").in(ids))),
Customer.class, Object.class);
但它不起作用。我正在寻找更好的方法。有什么建议吗?
注意 :可能查找作为SQL中的连接工作,其中查找外键 - 主键关系,此处不适用因为两个集合都是独立的。
最初我有两个不同的查询并将其添加到列表中。但我需要为组合列表实现分页。如果我使用两种查询方法,我将无法处理组合列表的分页。
Map reduce中是否有可以为此要求实现的选项?
希望情景清除。
答案 0 :(得分:0)
这是罪魁祸首Product.class.getName()
。这将给出带有路径的完整班级名称
您可以使用Product.class.getSimpleName()
或直接使用集合名称
另一件事是foriegn字段你不应该给customer._id
。只需指定为_id
LookupOperation lookupOperation = LookupOperation.newLookup()
.from("ProductCollectionName")
.localField("fieldNameInCustomerCollection")
.foreignField("fieldNameInProductCollection").as("entity");
AggregationResults<Object> entities =
this.template.aggregate(
Aggregation.newAggregation(lookupOperation,
Aggregation.match(Criteria.where("id").in(ids))),
Customer.class, Object.class);