mongo常用查询

mongo常用查询

基础

以下使用userEntity当作表明

查询姓名等于张三的用户

db.userEntity.find({name:'张三'})

查询年龄大于等与10的用户

db.userEntity.find({age:{$gte:10}})

查询年龄小于等与10的用户

db.userEntity.find({age:{$lte:10}})

查询名字等于张三并且年龄大于等于10的用户

db.userEntity.find({age:{$gte:10},name:'张三'})

查询年龄大于等与10或者姓名等于张三的用户

db.userEntity.find({  $or: [{'age':{$gte : 10 }},{'name':'张三'}]})

模糊查询姓名包含张三的用户

db.userEntity.find({{'name':/张三/})

模糊查询姓名以张三开头的用户

db.userEntity.find({{'name':/^张三/})

模糊查询姓名以张三结尾的用户

db.userEntity.find({{'name':/张三/})

统计姓名为张三的用户数量

db.userEntity.find({{'name':'张三'}).count()

返回固定字段name、age、birthday

db.userEntity.find({{'name':'张三'},{name:1,age:1,birthday:1})

返回固定字段

db.userEntity.find({{'name':'张三'},{name:1,age:1,birthday:1})

in查询

db.userEntity.find({{'name':{$in:['张三','李四','王五']}})

in查询

db.userEntity.find({{'name':{$in:['张三','李四','王五']}})

升序

db.userEntity.find().sort({"age":1});

降序

db.userEntity.find().sort({"age":-1});

进阶

联表查询、组合复杂查询

查询机构部门、树形结构查询
var parentId= "5c0e33b9c80d5897fd70b11d";
db.getCollection('resourceGroupEntity').find({
    parentId: parentId
}).forEach(function(org) {
   print(org.name)
  db.getCollection('resourceGroupEntity').find({"parentId" : org._id.str}).forEach(function(org2) {
       print("       "+org2.name)
    db.getCollection('resourceGroupEntity').find({"parentId" : org2._id.str,name:/客户服务中心/}).forEach(function(org3) {
       db.getCollection('userEntity').find({'attrs.stell':'48010238',groupIds:{$in:[org3._id.str]}}).forEach(function(usr) {
               print("                  "+org.name + "-" +org2.name + "-"  +org3.name + ","  + usr.displayName + "," + usr.username)
            })
        })
    })
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MongoTemplate 支持联合查询,即使用多个条件查询一个集合。以下是一些示例: 1. 使用 Criteria 对象联合查询 ```java Criteria criteria1 = Criteria.where("name").is("John"); Criteria criteria2 = Criteria.where("age").gte(18); Query query = new Query(); query.addCriteria(new Criteria().andOperator(criteria1, criteria2)); List<User> users = mongoTemplate.find(query, User.class); ``` 以上代码相当于 `db.getCollection("user").find({name: "John", age: {$gte: 18}})`。 2. 使用 where() 方法联合查询 ```java Query query = Query.query( Criteria.where("name").is("John") .and("age").gte(18) ); List<User> users = mongoTemplate.find(query, User.class); ``` 以上代码相当于 `db.getCollection("user").find({name: "John", age: {$gte: 18}})`。 3. 使用 @Query 注解联合查询 ```java @Query("{name: ?0, age: {$gte: ?1}}") List<User> findByCriteria(String name, int age); ``` 以上代码相当于 `db.getCollection("user").find({name: "John", age: {$gte: 18}})`,调用方式为 `findByCriteria("John", 18)`。 4. 使用 Aggregation 联合查询 ```java Aggregation aggregation = Aggregation.newAggregation( Aggregation.match(Criteria.where("name").is("John")), Aggregation.project("name", "age") ); AggregationResults<UserProjection> results = mongoTemplate.aggregate(aggregation, "user", UserProjection.class); List<UserProjection> users = results.getMappedResults(); ``` 以上代码相当于 `db.getCollection("user").aggregate([{$match: {name: "John"}}, {$project: {name: 1, age: 1}}])`。注意,由于聚合操作返回的结果不是实体类的列表,而是一个自定义的投影类(UserProjection),因此需要使用 AggregationResults 来获取结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

土豆炒茄子

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值