db.getCollection("es_product_notify").aggregate([
{
$lookup: {
from: 'es_app_product',
localField: 'product',
foreignField: '_id',
as: 'p'
}
},
{
$match:
{ 'createdDate': { $gte: ISODate('2019-06-01T00:00:00.000+0000'), $lt: ISODate('2019-07-01T00:00:00.000+0000') } }
},
{ $group: { "_id": "$p.sn", count: { $sum: 1 } } },
{ $sort: { count: -1 } }
])
db.getCollection("es_product_notify").aggregate([
{
$lookup: {
from: 'es_app_goods_detail',
localField: 'product',
foreignField: 'spls.skus._id',
as: 'k'
}
},
{
$lookup: {
from: 'es_app_product',
localField: 'product',
foreignField: '_id',
as: 'p'
}
},
{
$match:
{ 'createdDate': { $gte: ISODate('2019-12-01T00:00:00.000+0000'), $lt: ISODate('2020-01-01T00:00:00.000+0000') } }
},
{ $group: { "_id": {sku:"$p.sn",color:"$p.colourMemo",size:"$p.size",sn:"$k.goodsSn"}, count: { $sum: 1 } }},
{ $sort: { count: -1 } }
])
联表查询 spu 无spl的商品
db.getCollection("es_spu").aggregate([
{
$lookup: {
from: 'es_spl',
localField: '_id',
foreignField: 'spu',
as: 'p'
}
},
{
$match:
{ 'p':{$size:0} }
}
])
db.getCollection("search_history").aggregate(
[
{
"$match": {
"searchHistoryValues": { $regex: /水桶/ }
}
},
{
"$unwind": "$searchHistoryValues"
},
{ "$group": { _id: "$searchHistoryValues", count: { $sum: 1 } } },
{
"$sort": {
"count": -1.0
}
}
]
);
mongoTemplate实现
try {
List<AggregationOperation> operations = new ArrayList<>();
if(StringUtils.isNotEmpty(keyword)){
Pattern likekeyword = Pattern.compile("^.*" + keyword + ".*$", Pattern.CASE_INSENSITIVE);
operations.add(Aggregation.match(Criteria.where("searchHistoryValues").regex(likekeyword)));
}
operations.add(Aggregation.unwind("$searchHistoryValues"));
operations.add(Aggregation.group("searchHistoryValues").count().as("count"));
operations.add(Aggregation.sort(new Sort(Sort.Direction.DESC, "count")));
operations.add(Aggregation.limit(100));
Aggregation aggregation = Aggregation.newAggregation(operations);
AggregationResults<HotSearchWord> hotSearchWordsAgg = mongoTemplate.aggregate(aggregation, "search_history", HotSearchWord.class);
List<HotSearchWord> hotSearchWords = hotSearchWordsAgg.getMappedResults();
List<String> collect = hotSearchWords.stream().filter(hotSearchWord -> hotSearchWord.getId().contains(keyword)).map(HotSearchWord::getId).collect(Collectors.toList());
return collect;
}
catch (Exception e){
e.printStackTrace();
return null;
}
接收实体:
@Data
public class HotSearchWord {
@Id
private String id;
private String count;
}