将MongoDB查询转换为Spring MongoDB语法

时间:2019-03-01 19:30:37

标签: spring mongodb

您好,我无法将以下mongoDB查询转换为spring查询,我尝试了多种方法,但未得到结果。

db.getCollection('FarmerCropDataLog').aggregate([
        {
            "$match" : 
            {
                "cropData.crop" : "RICE",
                 "creationTime" :
                  {
                      $lt  : 1551447981473.0
                  }
            }
        },
        {
            "$group" :
            {
                _id : null,
                "average" :{
                        $avg : "$cropData.cropPrice"
                },
                "max" :{
                        $max : "$cropData.cropPrice"
                },
                "min":{
                        $min : "$cropData.cropPrice"
                }
            }
        }
    ])

我已经写了以下代码,但是无法考虑下一步。

Query query = new Query();

query.addCriteria(Criteria.where(FarmerCropDataLog.Constants.CROP_LOG).elemMatch(Criteria.where(CropData.Constants.CROP).is(getComparisonSheet.getCrop())));

query.addCriteria(Criteria.where(FarmerCropDataLog.Constants.CREATION_TIME).gt(Year * DIFF));

2 个答案:

答案 0 :(得分:2)

您是否曾经考虑过使用MongoDB指南针?它将使您的工作非常简单。

  1. 打开MongoDB compass连接到您的实例
  2. “聚合”标签,构建管道
  3. 单击save pipeline选项旁边的3个点(...)
  4. 选择export to language并选择Java
  5. 您的查询已准备就绪

这是Java查询

Arrays.asList(match(and(eq("cropData.crop", "RICE"), lt("creationTime", 1551447981473.0d))), group(new BsonNull(), avg("average", "$cropData.cropPrice"), max("max", "$cropData.cropPrice"), min("min", "$cropData.cropPrice")))

enter image description here

enter image description here

答案 1 :(得分:0)

如果您使用过JpaRepository,则很容易关联,就像创建JpaRepository一样,您可以创建一个接口并扩展MongoRepository,并且它提供了一些简单的方法,并且您不需要实现它。

您可以使用(例如,考虑具有姓氏和名字的人)

基于MongoDB JSON的查询方法和字段限制

public interface PersonRepository extends MongoRepository<Person, String>

@Query(value="{ 'firstname' : ?0 }", fields="{ 'firstname' : 1, 'lastname' : 1}")
List<Person> findByThePersonsFirstname(String firstname);
}

地理空间存储库查询

public interface PersonRepository extends MongoRepository<Person, String>

  // { 'location' : { '$near' : [point.x, point.y], '$maxDistance' : distance}}
  List<Person> findByLocationNear(Point location, Distance distance);
}
  

Read the Spring document here for MongoDB repositories