【问题标题】:Specify field projections in spring mongo db query在 spring mongo db 查询中指定字段投影
【发布时间】:2017-12-18 10:10:20
【问题描述】:
{
    "_id":"1",
    "company":"ABCD",
    "Address":{
    "Location":"XYZ"
    },
    "empName":[{
    "ID":1,
    "Name":"test1"
    },
    "ID":2,
    "Name":"test2"
    },
    "ID":3,
    "Name":"test3"
    }]
}

我正在使用 mongoTemplate 查询,

Criteria findCriteria1 = Criteria.where("_id").is("1");
Criteria find2Criteria = Criteria.where("empName").elemMatch(Criteria.where("ID").is(1));
BasicQuery basicQuery = new BasicQuery(findCriteria1.getCriteriaObject(), find2Criteria.getCriteriaObject());
mongoTemplate.findOne(basicQuery, ClassName.class);

但我的结果如下,其他字段显示为空。

{
    "_id":"1",
    "company":null,
    "Address":null,
    "empName":[{
    "ID":1,
    "Name":"test1"
    }]
}

我的预期结果应该是这样的,

"_id":"1",
"company":"ABCD",
"Address":{
"Location":"XYZ"
},
"empName":[{
"ID":1,
"Name":"test1"
}]

你能帮我解决这个问题吗?

提前致谢,

【问题讨论】:

    标签: json spring spring-data-mongodb mongotemplate


    【解决方案1】:

    您可以使用以下代码。

    您可以在Field 类中链接您需要的字段。

    Criteria criteria = Criteria.where("_id").is("1");
    Query query = new Query(criteria);
    query.fields().elemMatch("empName", Criteria.where("ID").is(1)).include("company");
    mongoTemplate.findOne(query , ClassName.class);
    

    【讨论】:

      【解决方案2】:

      请阅读CriteriaBasicQuery 的文档。

      这个中的第二个参数

      BasicQuery basicQuery = new BasicQuery(findCriteria1.getCriteriaObject(), find2Criteria.getCriteriaObject());  
      

      基本上是一个投影。即您告诉驱动程序仅获取其中提到的字段。因此其他字段没有被提取,因此为空。

      如果你想获取所有字段,这就是你应该做的事情

          Criteria findCriteria1 = Criteria.where("_id").is("1");  
          Criteria find2Criteria = Criteria.where("empName").elemMatch(Criteria.where("ID").is(1));  
          BasicQuery basicQuery = new BasicQuery(findCriteria1.andOperator(find2Criteria).getCriteriaObject());
      

      【讨论】:

      • 感谢@pvpkiran 的评论。作为 mongo db 的新手,无法使用和操作符,如下所示,BasicQuery basicQuery = new BasicQuery(findCriteria1.getCriteriaObject().andOperator(find2Criteria.getCriteriaObject()); mongoTemplate.findOne(basicQuery, ClassName.class); 你能帮忙吗这个?
      • 无法使用是什么意思。你有什么错误吗?
      • 是的,它的编译错误。类型 DBObject 的方法 andOperator(DBObject) 未定义
      • 编译器显示 add cast to DBObject 最后输出是 org.springframework.data.mongodb.core.query.Criteria cannot be cast to com.mongodb.DBObject
      • 再次编辑。立即查看
      猜你喜欢
      • 1970-01-01
      • 2020-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      相关资源
      最近更新 更多