我正在使用带有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中找到相关的参考资料。
有什么想法吗?
答案 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)
);