【问题标题】:Spring mongo repository sliceSpring mongo 存储库切片
【发布时间】:2016-03-09 08:47:25
【问题描述】:

我正在将 spring-sata-mongodb 1.8.2 与 MongoRepository 一起使用,并且我尝试在查询时使用 mongo $slice 选项来限制列表大小,但我在 mongorepository 中找不到此选项。

我的课程如下所示:

public class InnerField{
    public String a;
    public String b;
    public int n;
}

@Document(collection="Record")
punlic class Record{
    public ObjectId id;
    public List<InnerField> fields;
    public int numer;
}

如您所见,我有一个集合名称“Record”,文档包含 InnerField。 InnerField 列表一直在增长,所以我想在查询时限制所选字段的数量。

我看到了:https://docs.mongodb.org/v3.0/tutorial/project-fields-from-query-results/

这正是我需要的,但我在 mongorepository 中找不到相关参考。

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    Query 中的$slice 运算符提供抽象仍然是一个悬而未决的问题。请为DATAMONGO-1230 投票并帮助我们确定优先级。

    现在你仍然可以使用BasicQuery

    String qry = "{ \"_id\" : \"record-id\"}";
    String fields = "{\"fields\": { \"$slice\": 2} }";
    
    BasicQuery query = new BasicQuery(qry, fields);
    

    【讨论】:

      【解决方案2】:

      使用 Java Mongo 驱动程序中提供的切片功能,使用以下代码中的投影。

      例如:

      List<Entity> list = new ArrayList<Entity>();
              // Return the last 10 weeks data only
      FindIterable<Document> list = db.getDBCollection("COLLECTION").find()
                      .projection(Projections.fields(Projections.slice("count", -10)));
      MongoCursor<Document> doc = list.iterator();
      while(doc.hasNext()){
          list.add(new Gson().fromJson(doc.next().toJson(), Entity.class));
      }
      

      上述查询将获取所有实体类类型的文档,并且每个实体类文档的“字段”列表将只有最后 10 条记录。

      【讨论】:

        【解决方案3】:

        我在单元测试文件 (DATAMONGO-1457) 中找到了使用切片的方法。像这样的东西。

        newAggregation(
            UserWithLikes.class, 
            match(new Criteria()),
            project().and("likes").slice(2)
        );
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-06
          相关资源
          最近更新 更多