当前位置:网站首页>MongDb query method
MongDb query method
2022-08-09 06:38:00 【The road is long and long - the journey will come - the journey】
MongDb的使用方式,Mainly how the business logic is usedMongDb的方式
@Service
public class RsUserTagServiceImpl implements RsUserTagService {
private final static int CATEGORY_RCMD_TYPE = 0;
private final static String CATEGORY_RCMD_NAME = "推荐";
@Autowired
private MongoTemplate mongoTemplate;
@Autowired
private RsRuleDao rsRuleDao;
@Autowired
private RsCategoryDao rsCategoryDao;
@Autowired
private RsCategoryInfoDao rsCategoryInfoDao;
@Override
public List<RsCategoryInfoVo> queryCategoryInfo() {
List<RsCategoryInfoVo> list = new ArrayList<>();
RsCategoryInfoVo categoryInfo = new RsCategoryInfoVo();
categoryInfo.setCategoryType(CATEGORY_RCMD_TYPE);
categoryInfo.setCategoryName(CATEGORY_RCMD_NAME);
list.add(categoryInfo);
List<RsCategoryInfo> rsCategoryInfos = rsCategoryInfoDao.selectCategoryInfoList();
if(!CollectionUtils.isEmpty(rsCategoryInfos)){
rsCategoryInfos.forEach(rsCategoryInfo -> {
if(CATEGORY_RCMD_TYPE != rsCategoryInfo.getCategoryType().intValue()){
RsCategoryInfoVo rsCategoryInfoVo = new RsCategoryInfoVo();
rsCategoryInfoVo.setCategoryType(rsCategoryInfo.getCategoryType());
rsCategoryInfoVo.setCategoryName(rsCategoryInfo.getCategoryName());
list.add(rsCategoryInfoVo);
}
});
}
return list;
}
@Override
public PageVo<RsUserVo> queryUserTag(int pageNum, int pageSize, String userId) {
PageVo<RsUserVo> page = new PageVo<>(pageNum, pageSize);
if(StringUtils.isBlank(userId)){
Aggregation aggregation = Aggregation.newAggregation(Aggregation.group(new String[] { "c_innerUid" }));
List<Map> result = this.mongoTemplate.aggregate(aggregation, "rs_user_tags", Map.class).getMappedResults();
if (CollectionUtils.isEmpty(result)) {
page.setTotal(0);
page.setRecords(new ArrayList<>());
return page;
}
page.setTotal(result.size());
long skip = Long.parseLong (String.valueOf((pageNum - 1) * pageSize));
aggregation = Aggregation.newAggregation(new AggregationOperation[] {
Aggregation.group(new String[] { "c_innerUid" }).first("c_innerUid").as("c_innerUid"),
Aggregation.sort(Sort.Direction.ASC, new String[] { "c_innerUid" }), Aggregation.skip(skip), Aggregation.limit(pageSize) });
result = this.mongoTemplate.aggregate(aggregation, "rs_user_tags", Map.class).getMappedResults();
if (CollectionUtils.isEmpty(result)) {
return null;
}
List<RsUserVo> records = new ArrayList<>(result.size());
for (Map m : result) {
RsUserVo user = new RsUserVo();
user.setUserId(m.get("c_innerUid").toString());
// 根据用户id查询标签
user.setTags(getTagsByUserId(user.getUserId()));
records.add(user);
}
page.setRecords(records);
}else{
Set<String> set = getTagsByUserId(userId);
List<RsUserVo> records = new ArrayList<>();
if(null == set){
page.setTotal(0);
}else{
page.setTotal(1);
RsUserVo user = new RsUserVo();
user.setUserId(userId);
user.setTags(set);
records.add(user);
}
page.setRecords(records);
}
return page;
}
@Override
public List<RsTagVo> queryTagByUserId(int pageNum, int pageSize, String userId, String tagSource) {
// Scan scan = new Scan();
// String startRow = MD5Utils.getMd5(userId) + "\001" + " ";
// String endRow = MD5Utils.getMd5(userId) + "\001" + "?";
// scan.setStartRow(Bytes.toBytes(startRow));
// scan.setStopRow(Bytes.toBytes(endRow));
// scan.setCaching(1000);
// List<RsUserRuleIndex> rsUserRuleIndexList = this.hbaseTemplate.find(newsRepo + ":rcmd_user_rule_uid_index", scan, new RsUserRuleIndexMapper());
// if(CollectionUtils.isEmpty(rsUserRuleIndexList)){
// return Lists.newArrayList();
// }
// List<Get> getList = new ArrayList<>();
// rsUserRuleIndexList.forEach(userRule -> {
// getList.add(new Get(Bytes.toBytes(userRule.getIndex())));
// });
// List<RsUserRule> rsUserRuleList = this.hbaseTemplate.getByGetList(newsRepo + ":rcmd_user_rule", getList, new RsUserRuleMapper());
// if(CollectionUtils.isEmpty(rsUserRuleList)){
// return Lists.newArrayList();
// }
// Map<Integer,RsRuleVo> ruleMap = this.getRuleMap();
// Map<Integer,String[]> categoryMap = this.getRuleCategoryMap();
// Map<String, Long> newsCountMap = this.groupByUserIdAndTagId(userId);
// List<RsTagVo> records = new ArrayList<>(rsUserRuleList.size());
// rsUserRuleList.forEach(rsUserRule -> {
// RsRuleVo rule = ruleMap.get(rsUserRule.getRuleType());
// if(null != rule){
// RsTagVo tag = new RsTagVo();
// tag.setTagId(rsUserRule.getRuleName());
// String[] tags = rsUserRule.getRulePath().split("\\u0001");
// tag.setTagName(tags[tags.length-1]);
// tag.setRule(rule);
// tag.setRulePath(rsUserRule.getRulePath());
// tag.setRulePathArr(tags);
// tag.setRuleType(rsUserRule.getRuleType());
// tag.setTagWeight(rsUserRule.getWeight());
// tag.setOwnColumn(categoryMap.get(rsUserRule.getRuleType()));
// tag.setNewsCount(null == newsCountMap.get(tag.getTagId()) ? 0L : newsCountMap.get(tag.getTagId()));
// records.add(tag);
// }
// });
// //Sort by label weight in descending order
// return records.stream().sorted(Comparator.comparing(RsTagVo::getRuleType))
// .collect(Collectors.toList());
return Collections.emptyList();
}
@Override
public PageVo<RsNewsVo> queryNewsByTagId(int pageNum, int pageSize, String tagId, String userId, Integer recommend) {
Query query = new Query();
// 设置起始数
query.skip((pageNum - 1) * pageSize);
// 设置查询条数
query.limit(pageSize);
Criteria criteria = new Criteria();
Pattern pattern = Pattern.compile("^.*" + tagId + ".*$", Pattern.CASE_INSENSITIVE);
criteria.and("c_reason").regex(pattern);
if(StringUtils.isNotBlank(userId)){
criteria.and("c_innerUid").is(userId);
}
if(null != recommend){
criteria.and("i_isRecommended").is(recommend);
}
query.addCriteria(criteria);
query.with(new Sort(Sort.Direction.DESC, "d_weight"));
List<RsUserNews> rsUserNews = this.mongoTemplate.find(query, RsUserNews.class, "rs_user_news");
long total = mongoTemplate.count(query, RsUserTag.class, "rs_user_news");
PageVo<RsNewsVo> page = new PageVo<>(pageNum, pageSize);
page.setTotal(total);
page.setRecords(getRsNewsList(rsUserNews));
return page;
}
@Override
public PageVo<RsNewsVo> queryNewsByUserId(int pageNum, int pageSize, String userId, String newsId, Integer newsCategory, Integer recommend) {
Query query = new Query();
// 设置起始数
query.skip((pageNum - 1) * pageSize);
// 设置查询条数
query.limit(pageSize);
Criteria criteria = Criteria.where("c_innerUid").is(userId);
if(StringUtils.isNotBlank(newsId)){
criteria.and("c_newsId").is(newsId);
}
if(null != newsCategory){
criteria.and("i_category").is(newsCategory);
}
if(null != recommend){
criteria.and("i_isRecommended").is(recommend);
}
query.addCriteria(criteria);
query.with(new Sort(Sort.Direction.DESC, "d_weight"));
List<RsUserNews> rsUserNews = this.mongoTemplate.find(query, RsUserNews.class, "rs_user_news");
long total = this.mongoTemplate.count(query, RsUserTag.class, "rs_user_news");
PageVo<RsNewsVo> page = new PageVo<>(pageNum, pageSize);
page.setTotal(total);
page.setRecords(getRsNewsList(rsUserNews));
return page;
}
// 根据用户id查询标签
private Set<String> getTagsByUserId(String userId) {
// 根据用户idQuery all tags frommongo
Query query = new Query();
Criteria criteria = new Criteria();
criteria.and("c_innerUid").is(userId);
query.addCriteria(criteria);
query.with(new Sort(Sort.Direction.DESC, "d_weight"));
List<RsUserTag> rsUserTags = this.mongoTemplate.find(query, RsUserTag.class, "rs_user_tags");
if (CollectionUtils.isEmpty(rsUserTags)) {
return null;
}
Set<String> set = new HashSet<>();
rsUserTags.forEach(userTag -> {
if (StringUtils.isNotBlank(userTag.getTagName())){
set.add(userTag.getTagName());
}
});
return set;
}
private List<RsNewsVo> getRsNewsList(List<RsUserNews> rsUserNews){
// Map<Integer, String> categoryNameMap = getCategoryNameMap();
// List<RsNewsVo> records = new ArrayList<>();
// List<Get> getList = new ArrayList<>();
// if (!CollectionUtils.isEmpty(rsUserNews)) {
// rsUserNews.forEach(userNews -> {
// getList.add(new Get(Bytes.toBytes(StringUtils.reverse(userNews.getNewsId()))));
// });
// List<RsNewsRepository> rsNewsRepositoryList = this.hbaseTemplate.getByGetList(newsRepo + ":rcmd_news_repository", getList, new RsNewsMapper());
// Map<String, RsNewsRepository> newsRepositoryMap = new HashMap<>();
// if(!CollectionUtils.isEmpty(rsNewsRepositoryList)){
// rsNewsRepositoryList.forEach(rsNewsRepository -> {
// newsRepositoryMap.put(rsNewsRepository.getNewsId(), rsNewsRepository);
// });
// }
// rsUserNews.forEach(userNews -> {
// records.add(getRsNewsVo(userNews, categoryNameMap, newsRepositoryMap));
// });
// }
// return records;
return Collections.emptyList();
}
//
// /*
// * *
// *
// * @Description 根据RsUserNews创建RsNewsVo
// *
// * @Author
// *
// * @Date 2019/6/6
// *
// * @Param [userNews]
// *
// * @return com.gildata.threebody.tbm.api.vo.RsNewsVo
// **/
// private RsNewsVo getRsNewsVo(RsUserNews userNews, Map<Integer,String> categoryNameMap, Map<String, RsNewsRepository> newsRepositoryMap) {
// RsNewsVo news = new RsNewsVo();
// news.setNewsId(userNews.getNewsId());
// news.setNewsWeight(userNews.getWeight());
// news.setEnterRcmdTime(userNews.getSaveTime());
// news.setPubTime(userNews.getPubTime());
// news.setTagWeight(userNews.getTagWeight());
// news.setOwnColumn(categoryNameMap.get(userNews.getCategory()));
// news.setCategory(userNews.getCategory());
// news.setRecommend(userNews.getIsRecommended());
RsNewsRepository rsNewsRepository = newsRepositoryMap.get(userNews.getNewsId());
if (null != rsNewsRepository) {
news.setNewsTitle(rsNewsRepository.getTitle());
news.setGrabTime(rsNewsRepository.getRecordTime());
news.setUrl(rsNewsRepository.getUrl());
List<RsNewsRepository.Tag> tags = rsNewsRepository.getTags();
if (!CollectionUtils.isEmpty(tags)) {
Set<Map<String,Object>> tagMapSet = new HashSet<>();
tags.forEach(tag -> {
if (StringUtils.isNotBlank(tag.getTagValue())) {
Map<String,Object> tagMap = new HashMap<>();
tagMap.put("tagName", tag.getTagValue());
tagMap.put("tagWeight", tag.getTagWeight());
tagMapSet.add(tagMap);
}
});
news.setTags(tagMapSet);
}
}
// return news;
// }
private Map<Integer,RsRuleVo> getRuleMap(){
Map<Integer,RsRuleVo> ruleMap = new HashMap<>();
List<RsRule> rules = rsRuleDao.selectRuleList();
if(!CollectionUtils.isEmpty(rules)){
rules.forEach(rule -> {
RsRuleVo rsRuleVo = new RsRuleVo();
rsRuleVo.setRuleType(rule.getRuleType());
rsRuleVo.setRuleName(rule.getRuleName());
ruleMap.put(rule.getRuleType(), rsRuleVo);
});
}
return ruleMap;
}
private Map<Integer,String[]> getRuleCategoryMap(){
Map<Integer,String[]> categoryMap = new HashMap<>();
List<RsRuleCategory> rsRuleCategories = rsCategoryDao.selectCategoryNamesGroupByRuleType();
if(!CollectionUtils.isEmpty(rsRuleCategories)){
rsRuleCategories.forEach(rsRuleCategory -> {
categoryMap.put(rsRuleCategory.getRuleId(), rsRuleCategory.getCategories().split(","));
});
}
return categoryMap;
}
private Map<Integer,String> getCategoryNameMap(){
Map<Integer,String> map = new HashMap<>();
List<RsCategoryInfo> rsCategoryInfos = rsCategoryInfoDao.selectCategoryInfoList();
if(!CollectionUtils.isEmpty(rsCategoryInfos)){
rsCategoryInfos.forEach(rsCategoryInfo -> {
map.put(rsCategoryInfo.getCategoryType(), rsCategoryInfo.getCategoryName());
});
}
return map;
}
/* *
* @Description 根据用户id和tagIdNumber of stats
* @Author
* @Date 2019/6/14
* @Param [userId]
* @return java.util.Map<java.lang.String,java.util.Map<java.lang.String,java.lang.Long>>
**/
private Map<String,Long> groupByUserIdAndTagId(String userId){
Criteria criteria = Criteria.where("c_innerUid").is(userId);
GroupBy groupBy = new GroupBy("c_innerUid", "c_tagId");
groupBy.initialDocument("{ count: 0 }").reduceFunction("function (doc,pre){pre.count +=1 ;}");
GroupByResults<RsUserTagNewsCount> result = this.mongoTemplate.group(criteria, "rs_user_news", groupBy, RsUserTagNewsCount.class);
Map<String,Long> map = new HashMap<>();
result.forEach(groupByResult -> {
map.put(groupByResult.getC_tagId(), groupByResult.getCount());
});
return map;
}
边栏推荐
- crc calculation
- DevNet: Deviation Aware Networkfor Lane Detection
- mmdetection源码解析--ResNet18
- How to find package information and pin definitions for NXP S32K1xx series microcontrollers
- 直接用的zip包 缺少很多依赖,pip没有,感觉用anaconda create一个环境会方便点
- The JVM thread state
- 先序遍历,中序遍历,后序遍历,层序遍历
- workbench 数据导出
- Gao Zelong, a famous digital collection expert and founder of the Digital Collection Conference, was interviewed by China Entrepreneur Magazine
- io.lettuce.core.RedisCommandTimeoutException Command timed out
猜你喜欢
PDF不能打印和复制的问题如何解决?
报错:FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disab
leetcode 之盛水问题
INSTALL_RPATH and BUILD_RPATH problem in CMake
中英文说明书丨TRC D-阿卓糖(D-Altrose)
pdf加密、找回密码
Error jinja2.exceptions.UndefinedError: 'form' is undefined
长沙学院2022暑假训练赛(一)六级阅读
ByteDance Interview Questions: Mirror Binary Tree 2020
leetcode 之 70 爬楼梯问题 (斐波那契数)
随机推荐
TCP segment of a reassembled PDU
Flask failed to create database without error
Quectel EC20 4G module dial related
Xilinx Zynq ZynqMP DNA
db.sqlite3 has no "as Data Source" workaround
Silently start over, the first page is also a new page
直接用的zip包 缺少很多依赖,pip没有,感觉用anaconda create一个环境会方便点
Singleton DCL (double check the lock) full han mode and the hungry
抗菌药物丨Toronto Research Chemicals 天冬酰胺D
leetcode 之盛水问题
图论,二叉树,dfs,bfs,dp,最短路专题
代码目录结构
长沙学院2022暑假训练赛(一)六级阅读
报错:FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disab
P7 Alibaba Interview Questions 2020.07 Sliding Window Algorithm (Alibaba Cloud Interview)
APP商品详情源数据接口(淘宝/京东/拼多多/苏宁/抖音等平台详情数据分析接口)代码对接教程
Altium designer software commonly used the most complete package library, including schematic library, PCB library and 3D model library
【Wwise】ArgumentException: The specified path is not of a legal form (empty). About the path reading error in WwiseGlobal
中英文说明书丨CalBioreagents 山羊抗人白蛋白,IgG组分
普罗米修斯原理及节点发布