java mongodb 分页_java-嵌套集合字段的Spring Mongodb分页

我在另一个文档中有一个文档集合.希望在获取数据时对嵌套元素执行分页.你能让我知道怎么做吗?在结构中,我想使用分页获取消息.

public abstract class CommonDomainAttributes implements Serializable, Cloneable {

private static final long serialVersionUID = 1L;

@Id

protected String id;

@JsonIgnore

@CreatedDate

protected Date createDate;

//@JsonIgnore

@LastModifiedDate

//@JsonSerialize(using=JsonDateSerializer.class)

protected Date lastModifiedDate;

@JsonIgnore

@CreatedBy

protected String createdBy;

@JsonIgnore

@LastModifiedBy

protected String lastModifiedBy;

/**

* @return the id

*/

public String getId() {

return id;

}

/**

* @param id the id to set

*/

public void setId(String id) {

this.id = id;

}

/**

* @return the createDate

*/

public Date getCreateDate() {

return createDate;

}

/**

* @param createDate the createDate to set

*/

public void setCreateDate(Date createDate) {

this.createDate = createDate;

}

/**

* @return the lastModifiedDate

*/

public Date getLastModifiedDate() {

return lastModifiedDate;

}

/**

* @param lastModifiedDate the lastModifiedDate to set

*/

public void setLastModifiedDate(Date lastModifiedDate) {

this.lastModifiedDate = lastModifiedDate;

}

/**

* @return the createdBy

*/

public String getCreatedBy() {

return createdBy;

}

/**

* @param createdBy the createdBy to set

*/

public void setCreatedBy(String createdBy) {

this.createdBy = createdBy;

}

/**

* @return the lastModifiedBy

*/

public String getLastModifiedBy() {

return lastModifiedBy;

}

/**

* @param lastModifiedBy the lastModifiedBy to set

*/

public void setLastModifiedBy(String lastModifiedBy) {

this.lastModifiedBy = lastModifiedBy;

}

/* (non-Javadoc)

* @see java.lang.Object#hashCode()

*/

@Override

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + (id == null ? 0 : id.hashCode());

return result;

}

/* (non-Javadoc)

* @see java.lang.Object#equals(java.lang.Object)

*/

@Override

public boolean equals(Object obj) {

if (this == obj) {

return true;

}

if (obj == null) {

return false;

}

if (getClass() != obj.getClass()) {

return false;

}

CommonDomainAttributes other = (CommonDomainAttributes) obj;

if (id == null) {

if (other.id != null) {

return false;

}

} else if (!id.equals(other.id)) {

return false;

}

return true;

}

/* (non-Javadoc)

* @see java.lang.Object#toString()

*/

@Override

public String toString() {

StringBuilder builder = new StringBuilder();

builder.append("CommonDomainAttributes [id=").append(id)

.append(", createDate=").append(createDate)

.append(", lastModifiedDate=").append(lastModifiedDate)

.append(", createdBy=").append(createdBy)

.append(", lastModifiedBy=").append(lastModifiedBy)

.append(", toString()=").append(super.toString()).append("]");

return builder.toString();

}

}

public class Message extends CommonDomainAttributes implements Serializable{

private String fromuserId;

private String fromuserName;

private String toUserId;

private String touserName;

private String message;

/**

* @return the fromuserId

*/

public String getFromuserId() {

return fromuserId;

}

/**

* @param fromuserId the fromuserId to set

*/

public void setFromuserId(String fromuserId) {

this.fromuserId = fromuserId;

}

/**

* @return the fromuserName

*/

public String getFromuserName() {

return fromuserName;

}

/**

* @param fromuserName the fromuserName to set

*/

public void setFromuserName(String fromuserName) {

this.fromuserName = fromuserName;

}

/**

* @return the toUserId

*/

public String getToUserId() {

return toUserId;

}

/**

* @param toUserId the toUserId to set

*/

public void setToUserId(String toUserId) {

this.toUserId = toUserId;

}

/**

* @return the touserName

*/

public String getTouserName() {

return touserName;

}

/**

* @param touserName the touserName to set

*/

public void setTouserName(String touserName) {

this.touserName = touserName;

}

/**

* @return the message

*/

public String getMessage() {

return message;

}

/**

* @param message the message to set

*/

public void setMessage(String message) {

this.message = message;

}

/* (non-Javadoc)

* @see java.lang.Object#toString()

*/

@Override

public String toString() {

StringBuilder builder = new StringBuilder();

builder.append("Message [fromuserId=");

builder.append(fromuserId);

builder.append(", fromuserName=");

builder.append(fromuserName);

builder.append(", toUserId=");

builder.append(toUserId);

builder.append(", touserName=");

builder.append(touserName);

builder.append(", message=");

builder.append(message);

builder.append(", toString()=");

builder.append(super.toString());

builder.append("]");

return builder.toString();

}

}

@Document(collection="discussion")

@TypeAlias("discussion")

public class Discussion extends CommonDomainAttributes implements Serializable{

private String discussionTopic;

private List messages;

/**

* @return the discussionTopic

*/

public String getDiscussionTopic() {

return discussionTopic;

}

/**

* @param discussionTopic the discussionTopic to set

*/

public void setDiscussionTopic(String discussionTopic) {

this.discussionTopic = discussionTopic;

}

/**

* @return the messages

*/

public List getMessages() {

return messages;

}

/**

* @param messages the messages to set

*/

public void setMessages(List messages) {

this.messages = messages;

}

/**

* @param messages the messages to set

*/

public void addMessages(Message message) {

if(null == messages){

messages = new LinkedList<>();

}

messages.add(message);

}

/* (non-Javadoc)

* @see java.lang.Object#toString()

*/

@Override

public String toString() {

StringBuilder builder = new StringBuilder();

builder.append("Discussion [discussionTopic=");

builder.append(discussionTopic);

builder.append(", messages=");

builder.append(messages);

builder.append(", toString()=");

builder.append(super.toString());

builder.append("]");

return builder.toString();

}

}

最佳答案

一点关于Mongo查询语言

在MongoDB中,$slice运算符控制查询返回的数组的项数. $slice运算符可以接受以下语法的值:

[toSkip, toLimit]

第一个值指示要跳过的数组中的项目数,第二个值指示要返回的项目数.例如,您可以使用以下查询:

db.discussions.find({}, {messages: {$slice: [20, 10]}})

在跳过该数组的前20条消息后返回10条消息.

将其带入Spring Data World

为了将$slice运算符与Spring Data MongoDB一起使用,您应该使用@Query注释及其字段属性.例如,如果您有一个DiscussionRepository,则可以编写如下内容:

public interface DiscussionRepository extends MongoRepository {

@Query(value = "{}", fields = "{messages: {$slice: [?0, ?1]}}")

List findDiscussions(int skip, int limit);

}

通过这种安排,以下方法调用:

discussionRepository.findDiscussions(20, 10)

将产生与以下结果相同的结果:

db.discussions.find({}, {messages: {$slice: [20, 10]}})

只需一点工作,就可以将“跳过/限制”组合变为分页功能.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值