MongoDB常用命令及java中的用法梳理
各位大佬,总结中存在如有错误,还请谅解指出,后续会不断更新,谢谢!
1、查询语句
- db.user.find({"name":"张三"},{"id":1,"age":1}) 根据name查询出数据,并只展示id和age字段数据(第一个{}中为查询条件,以,隔开;第二个{}为返回展示的字段)
- db.user.find({"name":"张三"},{"id":0,"age":0}) 根据name查询出数据,并展示除id和age的其他所有字段数据(0和1只能使用一种情况)
- db.user.find({}) 查询所有数据
- db.user.find({"name":{$regex:"张"},"age":"20"}) 根据name模糊查询和age匹配查询
Query query = Query.query(Criteria.where("name").regex(user.getName).and("age").is(user.getAge));
List<User> users = mongoTemplate.find(query, User.class);
- db.user.count() 获取所有数据的数量
Query query = Query.query(Criteria.where("name").regex(user.getName).and("age").is(user.getAge));
Long total = mongoTemplate.count(query, User.class);
- db.user.find({}).sort({id:1, name:-1}) 根据id进行排序 1 升序 -1 降序
query.with(new Sort(Sort.Direction.DESC, "id"));
- in 包含 、 nin 不包含 、 ne 不等于 、 all 包含所有(包含all中的多个值)、regex 模糊查询、 exists 字段是否存在、elemMatch
db.user.find({"age":"18","role":{$in:["开发","测试"]}}) 查询年龄18且角色为开发或测试人员信息
db.user.find({"age":{$nin:["70","80"]}}) 查询年龄不包含70、80的数据
db.user.find(name:{$ne:"张三"}) 查询名称不是张三的数据
db.usre.find(role:{$all:["管理员","开发"]}) 查询角色中包含管理员和开发 的人员信息(role为List<String>类型)
db.user.find({name:{$regex:"张"}}) db.user.find(({name:/张/}) 模糊查询名称带有张的数据
db.user.find({sex:{$exists:false}}) 查询数据中不包含sex字段的数据(不包含sex为空或null情况,当为true时为字段存在)
db.user.find({wifeinfo:{$elemMatch:{"name":"小红"}}}) 查询老婆名称为小红的人员数据(wifeinfo为Map数据类型)
- or 、and
db.user.find({$or:[{age:"18"},{"age":"20"}]}) 查询年龄18和20的数据
db.user.find({$and:[{age:"18"},{"role":{$in:["开发"]}}]}) 查询年龄18且角色包含开发的数据
- 聚合管道 match 筛选条件 、 group 分组、 sort 排序、skip 跳过条数、 limit 限制条数
db.user.aggregate(
[
{$match: {"role": {$in: ["p180123112810018", "p160307185810006", "p180224165910065"]}}},
{$group: {"_id":{"age":"$age" , "company":"$company"}}}, //根据年龄和公司进行分组
{$sort:{"id":-1}}, //根据id进行降序排序{"$skip":10}, //跳过10条数据
{"$limit":5} //展示5条数据
]);
批量修改,将user表中的微信名称都改为用户名称
db.user.find({}).forEach(
function(item){
db.user.update({"id":item.id},{$set:{weixname:item.name}})
}
)
统计表中gituser的值重复出现次数大于1
db.gitlabUserInfo.aggregate([
{$group:{
_id:{"gituser":"$gituser"}, count:{$sum:1}
}
},
{
$match:{count:{$gt:1}}
}
])
索引
//查询所有索引
db.user.getIndexes()
//创建普通索引
db.user.createIndex({"name":1})
//创建唯一索引
db.user.createIndex({"id":1},{unique:true})
//删除索引(sys_id_1索引id)
db.user.dropIndex("sys_id_1")