MongoDB使用总结
常用语句
查询
command
db.getCollection('data').find({"id":"233"})
java
Query query = new Query();
query.addCriteria(Criteria.where("id").is("233"));
return mongoTemplate.find(query, Data.class);
插入
command
db.info.insert({id: '121456516',
cid: '001',
ctime: ISODate("2021-07-09T08:48:46.103Z")
})
java
Info info = new Info()
info.setId(CommonUtils.getUUID());
info.setCid("001");
info.setCtime(new Date());
mongoTemplate.insert(info);
update command
db.data.update({"creator_id":''},{$set:{"creator_id":'374103'}},{multi:true});
java
Query query = Query.query(Criteria.where("creator_id").is(""));
Update update = new Update();
update.set("creator_id", 374103);
mongoTemplate.updateMulti(query, update, Data.class);
remove command
db.data.remove({"modify_id":"test111111111111111111"});
java
Query query = new Query(Criteria.where("modify_id").is(test111111111111111111));
mongoTemplate.remove(query, Data.class);
group语句
command
db.info_data.aggregate([
{
"$match": { // 查询条件
"user_id": "098581",
"status": "0"
}
},
{
"$project": { // 使用到的参数
"col_id": 1,
"user_id": 1,
"id": 1,
"status": 1,
"ctime":1,
}
},
{
"$group": { // group以及聚合操作(包含重命名)
"_id": "$col_id",
"user_id": {
"$max": "$user_id"
},
"col_agg_id" :{
"$max": "$id"
},
"data_status":{
"$min":"$status"
},
}
},
{
"$sort": {
"ctime": -1
}
}
])
java
List<Field> fieldList = new ArrayList<>();
fieldList.add(Fields.field("col_id"));
fieldList.add(Fields.field("user_id"));
fieldList.add(Fields.field("id"));
fieldList.add(Fields.field("status"));
fieldList.add(Fields.field("ctime"));
Fields fields = Fields.from(fieldList.toArray(new Field[0]));
// 要哪些字段
Aggregation colAgg = Aggregation.newAggregation(
StringUtils.isTrimEmpty(status) ?
Aggregation.match(
Criteria.where("user_id").is(currentId)
.and("ctime").gte(startDate).lte(endDate)
) :
Aggregation.match(
Criteria.where("user_id").is(currentId)
.and("status").is(status)
.and("ctime").gte(startDate).lte(endDate)
),
Aggregation.project(fields),
// 分组
Aggregation.group("col_id")
.max("user_id").as("user_id")
.max("id").as("col_agg_id")
.max("status").as("data_status")
.max("ctime").as("ctime"),
// 排序
Aggregation.sort(Sort.Direction.DESC, "ctime")
);
// 执行查询,这里的shop必须是查询的主表名
AggregationResults<MyPartColBean> colResults = mongoTemplate.aggregate(colAgg, "info_data", MyPartColBean.class);
if (colResults.getMappedResults() != null) {
List<MyPartColBean> colAggBeans = colResults.getMappedResults();
}
关联查询
command
db.info_collection.aggregate([
{
"$lookup": {
"from": "info_down",
"localField": "id",
"foreignField": "col_id",
"as": "col_down"
}
},
{
"$match": {
"col_down.accept_user_id": "098581",
"status": "1",
}
},
{
"$project": {
"col_down": 1,
"name": 1,
"status": 1,
"mode": 1,
"type": 1,
"end_time": 1,
}
},
{
"$unwind": "$col_down"
},
{
"$sort": {
"ctime": -1
}
}
]
)
java
// 构建 Aggregation:添加查询条件 下发表数据
Aggregation downAgg = Aggregation.newAggregation(
// 关联info_down表
Aggregation.lookup(
"info_down", // 从表表名
"id", // 主表被参考键键
"col_id", // 从表参考键
"col_down" // 联合查询出的别名,用于多条件查询表明前缀,相当于SQL中的临时表名
),
// ============================================= 以上内容可举一反三 =============================================
StringUtils.isTrimEmpty(status) ?
Aggregation.match(
Criteria.where("col_down.accept_user_id").is(currentId)
.and("status").is("1")
.and("col_down.ctime").gte(startDate).lte(endDate)
) :
Aggregation.match(
Criteria.where("col_down.accept_user_id").is(currentId)
.and("status").is("1")
.and("col_down.coll_status").is(status)
.and("col_down.ctime").gte(startDate).lte(endDate)
),
// 要哪些字段 info_collection info_down
Aggregation.project("col_down", "name", "status", "mode", "type",
"end_time"),
// 拆表 主表字段冗余 展开从表
Aggregation.unwind("col_down"),
// 排序
Aggregation.sort(Sort.Direction.DESC, "ctime")
);
// 执行查询,这里的shop必须是查询的主表名
AggregationResults<MyPartColBean> results = mongoTemplate.aggregate(downAgg, "info_collection", MyPartColBean.class);
List<MyPartColBean> colBeans = results.getMappedResults();