【问题标题】:Spring MongoDB BasicQuery not working with projectionSpring MongoDB BasicQuery 不适用于投影
【发布时间】:2018-03-06 15:13:47
【问题描述】:

我有以下 BasicQuery

BasicQuery query2 = new BasicQuery("{status:{$in:['APPROVED','NEW','OPEN']}},{siteId:1,_id:0}");

BasicQuery 是 SpringData mongoDb org.springframework.data.mongodb.core.query.BasicQuery 中的一个类。在进行调试时,上面的查询被编译成

Query: { "status" : { "$in" : [ "APPROVED" , "NEW" , "OPEN"]}}, Fields: null, Sort: { }

但是应该是编译成下面这样的

Query: { "status" : { "$in" : [ "APPROVED" , "OPEN" , "NEW"]}}, Fields: { "siteId" : 1 , "_id" : 0}, Sort: null

如果您注意到,编译的 BasicQuery 中仍然缺少字段。请帮助我如何在 BasicQuery 中进行项目。我可以使用 Query 进行投影,如下所示。

Query query = new Query();
        query.addCriteria(Criteria.where(STATUS).in(validStatus));
        query.fields().include("siteId").exclude("_id");

我的查询是如何使用 BasicQuery 实现相同的目标。

【问题讨论】:

    标签: spring mongodb spring-data spring-data-mongodb


    【解决方案1】:

    我想我得到了答案。我们需要使用两个字符串参数基本查询,而不是使用 BasicQuery 的单个字符串参数构造函数。

    BasicQuery query2 = new BasicQuery("{status:{$in:['APPROVED','NEW','OPEN']}}","{siteId:1,_id:0}");
    

    上面会编译成下面的查询

    Query: { "status" : { "$in" : [ "APPROVED" , "OPEN" , "NEW"]}}, Fields: { "siteId" : 1 , "_id" : 0}, Sort: null
    

    【讨论】:

      【解决方案2】:
      BasicQuery query = new BasicQuery("{ $and: [{ studentId: { $in: "+studentIds+" } }, { status: { $ne:  '"+studStatus+"'} }] }");
      

      studentIds 是一个数组,而 studStatus 是一个字符串! 感谢vashishth

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-27
        • 2019-12-22
        • 2021-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多