山东住房城乡建设厅网站,帮传销做网站会违法吗,小制作手工小学生,发布了一个网站 显示建设中目录 一、前言二、对象、数组等的查询2.1、代码实现示例 三、aggregate查询四、U(update)操作4.1、一般的(批量)操作4.2、数组操作 五、D(delete)操作 一、前言
一般使用mongodb存储非结构化数据#xff0c;因此#xff0c;除了常见的数字类型、String等外#xff0c;还有数… 目录 一、前言二、对象、数组等的查询2.1、代码实现示例 三、aggregate查询四、U(update)操作4.1、一般的(批量)操作4.2、数组操作 五、D(delete)操作 一、前言
一般使用mongodb存储非结构化数据因此除了常见的数字类型、String等外还有数组等复杂格式。查询方式有常见对象/数组等查询、aggregate聚合查询下面将具体介绍各类查询。
二、对象、数组等的查询
elemMatch操作符用于查询数组中满足特定条件的元素。默认情况下多条件查询一个数组。文档内的数组一个元素满足所有条件也可以是每个元素只满足一部分条件但加起来满足所有条件。使用$elemMatch操作符表示要求数组中至少一个元素满足所有条件。
2.1、代码实现示例 /*** 基本的查询针对各种对象、数据结构类型find()查询方式* param param* return*/public Object baseQuery(KnowledgeVo param){Criteria criteria new Criteria();criteria.and(tenantsid).is(563651117638208L);//模糊匹配
// Pattern pattern Pattern.compile(^.* param.getKnowledgeName() .*$, Pattern.CASE_INSENSITIVE);
// criteria.and(knowledge_name).is(pattern);//范围查询if(StringUtils.isBlank(param.getQueryStartTime()) StringUtils.isNotBlank(param.getQueryEndTime())){criteria.and(update_time).lte(TimeUtil.parseDatetime(param.getQueryEndTime()));}if(StringUtils.isNotBlank(param.getQueryStartTime()) StringUtils.isBlank(param.getQueryEndTime())){criteria.and(update_time).gte(TimeUtil.parseDatetime(param.getQueryStartTime()));}if(StringUtils.isNotBlank(param.getQueryStartTime()) StringUtils.isNotBlank(param.getQueryEndTime())){criteria.and(update_time).gte(TimeUtil.parseDatetime(param.getQueryStartTime())).lte(TimeUtil.parseDatetime(param.getQueryEndTime()));}//String数组的匹配查询// criteria.and(file_info).in(param.getFileInfo());/**knowledge_customize : {is_current_step_skip : 2,question_basic_info : [{project_stage_no : 1}]}*///对象的匹配查询【简单格式的】 knowledge_customize是对象is_current_step_skip是String类型// criteria.and(knowledge_customize.is_current_step_skip).is(2);//特别字段的查询【数组查询】 question_basic_info是knowledge_customize对象的数组字段,project_stage_no又是数组的Bean对象的一个字段// criteria.and(knowledge_customize.question_basic_info.project_stage_no).in(1);//使用elemMatch查询数组criteria.andOperator( Criteria.where(knowledge_customize.question_basic_info).elemMatch(Criteria.where(project_stage_no).is(1)));/**field_list : [{qa_type : question,field_name : 标准答案},{qa_type : answer,field_name : 问题描述}]----针对数组使用$elemMatch是用来查询*/
// Pattern pattern Pattern.compile(^.* param.getKnowledgeName() .*$, Pattern.CASE_INSENSITIVE);
// //模糊匹配覆盖多个字段去模糊匹配
// criteria.orOperator(
// Criteria.where(template_name).is(pattern),
// Criteria.where(knowledge_model_name).is(pattern),
// Criteria.where(field_list).elemMatch(
// Criteria.where(qa_type).in(answer, question, key_point) //数组中A字段满足某个条件
// .and(field_name).regex(pattern)));Query query new Query(criteria);ListKnowledgeDoc docList mongoTemplate.find(query,KnowledgeDoc.class,wwy_knowledge);return docList;}三、aggregate查询
可以参考mongodb集成aggregate查询
四、U(update)操作
4.1、一般的(批量)操作
/*** 修改数据* return*/
public UpdateResult update(){Query query new Query();query.addCriteria(Criteria.where(_id).is(0001));Update update new Update();update.set(name,www11back);update.set(age,10);update.set(sex,1);UpdateResult result mongoTemplate.updateFirst(query,update,w_test1);System.out.println(update result:result);//update result:AcknowledgedUpdateResult{matchedCount1, modifiedCount1, upsertedIdnull}return result;
}/*** 批量更新的操作* return*/
public int batchUpdate(){ListStudentDo list new ArrayList(); //要修改的一批数据ListPairQuery, Update updateList new ArrayList(list.size());BulkOperations operations mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, w_test1);list.forEach(data - {//如果query查询到有数据就更新Query query new Query(new Criteria(_id).is(data.getId()));Update update new Update();update.set(stu_name,data.getStuName());update.set(updateTime,data.getUpdateTime());PairQuery, Update updatePair Pair.of(query, update);updateList.add(updatePair);});operations.upsert(updateList);BulkWriteResult result operations.execute();return result.getModifiedCount();
}4.2、数组操作
数组更新操作符Array Update Operators
$ 占位符只更新符合条件的文档的数组字段中的第一个匹配的元素。 下文有demo。
$[] 占位符和$的区别是更新符合条件的文档的数组字段中的所有元素。
$[identifier] 也是占位符但是只更新符合条件的文档的数组中的指定元素符合某个条件。 要和update中的第三个参数中的可选项 arrayFilters配合使用。
$addToSet添加元素到一个数组确保不重复set。如果数组中没有一模一样的元素可以插入如果有则无法插入。
$pop 删除数组第一个或者最后一个元素。
$pull 删除数组中所有符合指定条件的元素。
$push 添加一个元素到数组中。
$pullAll 删除数组中的所有元素。五、D(delete)操作
mongoTemplate原生态的delete方法主要有以下几种。 DeleteResult remove(Object var1); DeleteResult remove(Object var1, String var2); DeleteResult remove(Query var1, String var2); DeleteResult remove(Query var1, Class? var2); DeleteResult remove(Query var1, Class? var2, String var3); public Long testDelete() {ContentDoc doc new ContentDoc ();doc.setId(new ObjectId(6475c519a2ad8619883aa9d8));// DeleteResult de mongoTemplate.remove(doc); // DeleteResult remove(Object var1);// DeleteResult de mongoTemplate.remove(doc,wwy_content); // DeleteResult remove(Object var1, String var2);Query query new Query(Criteria.where(_id).in(new ObjectId(64772716cdea002184353fb1),new ObjectId(6475d858a2ad8654bc6be713)));
// DeleteResult de mongoTemplate.remove(query, ContentDoc .class); //DeleteResult remove(Query var1, Class? var2);DeleteResult de mongoTemplate.remove(query, ContentDoc .class,wwy_content); // DeleteResult remove(Query var1, Class? var2, String var3);// DeleteResult de mongoTemplate.remove(query, wwy_content); // DeleteResult remove(Query var1, String var2);System.out.println(de:de.getDeletedCount()); //de:AcknowledgedDeleteResult{deletedCount1}return de.getDeletedCount();}