Spring mongo存储库切片

时间:2016-03-09 08:47:25

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

我正在使用带有MongoRepository的spring-sata-mongodb 1.8.2,我试图在查询时使用mongo $ slice选项来限制列表大小,但我无法在mongorepository中找到此选项。 / p>

我的课程看起来像这样:

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;
}

如你所见,我有一个收藏品名称&#34;记录&#34;并且该文档包含InnerField。 InnerField列表一直在增长,所以我想在查询时限制所选字段的数量。

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

这正是我的需要,但我无法在mongorepository中找到相关的参考资料。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

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

现在您仍然可以使用BasicQuery

String qry = "{ \"_id\" : \"record-id\"}";
String fields = "{\"fields\": { \"$slice\": 2} }";

BasicQuery query = new BasicQuery(qry, fields);

答案 1 :(得分:1)

使用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));
}

上述查询将获取Entity类类型的所有文档,每个Entity类文档的“field”列表将只有最后10条记录。

答案 2 :(得分:0)

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

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