Spring mongo repository slice

跟風遠走 提交于 2019-12-20 07:19:04

问题


I am using spring-sata-mongodb 1.8.2 with MongoRepository and I am trying to use the mongo $slice option to limit a list size when query, but I can't find this option in the mongorepository.

my classes look like this:

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

As you can see I have one collection name "Record" and the document contains the InnerField. the InnerField list is growing all the time so i want to limit the number of the selected fields when I am querying.

I saw that: https://docs.mongodb.org/v3.0/tutorial/project-fields-from-query-results/

which is exactly what I need but I couldn't find the relevant reference in mongorepository.

Any ideas?


回答1:


Providing an abstraction for the $slice operator in Query is still an open issue. Please vote for DATAMONGO-1230 and help us prioritize.

For now you still can fall back to using BasicQuery.

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

BasicQuery query = new BasicQuery(qry, fields);



回答2:


Use slice functionality as provided in Java Mongo driver using projection as in below code.

For Example:

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

The above query will fetch all documents of type Entity class and the "field" list of each Entity class document will have only last 10 records.




回答3:


I found in unit test file (DATAMONGO-1457) way to use slice. Some thing like this.

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


来源:https://stackoverflow.com/questions/35886810/spring-mongo-repository-slice

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!