Spring + MongoDB 利用MongoTemplate查询的问题

db中有符合该条件的数据。

Query query=new Query(
    Criteria.where("AAA").is(XXobj.getAAA()).
    orOperator(Criteria.where("BBB").is(XXobj.getBBB()))
    );

find()方法:

List<XXObject> result = mongoTemplate.find(query, XXObject.class);
if(result!=null && !result.isEmpty()){
    return result.get(0);
}

findOne()方法:

XXObject obj = mongoTemplate.findOne(query, XXObject.class);
if(obj!=null){
    return obj;
}

问:
为什么同样的条件,这两个查询的结果却不同?(我遇到的问题是findOne查询结果为空)。

附:
官方文档对findOne和find的说明:
findOne Map the results of an ad-hoc query on the collection to a single instance of an object of the specified type.

find Map the results of an ad-hoc query on the collection to a List of the specified type.

看起来没什么区别啊。

阅读 33.7k
1 个回答

class:

@Data
public class MgUser {
    private String nikename;
    private String phone;
}

测试类:

@Test
    public void test() {
        MgUser mgUser = new MgUser();
        mgUser.setNikename("pysasuke");
        mgUser.setPhone("18650140605");
        mongoTemplate.insert(mgUser);
        Query query=new Query(Criteria.where("nikename").is(mgUser.getNikename()).orOperator(Criteria.where("phone").is(mgUser.getPhone())));
        MgUser selectMgUser = mongoTemplate.findOne(query, MgUser.class);
        Assert.assertTrue(selectMgUser!=null);
        List<MgUser> list = mongoTemplate.find(query,MgUser.class);
        Assert.assertTrue(list.size() >= 1);
    }

我这边查询出来是有值的,希望能帮到你

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题