本文以mongo-java-driver-3.5.0.jar爲例
1 mongodb查詢語句查詢:
db.user.find().skip(1).limit(2) 與 db.user.find().limit(2).skip(1) 查詢結果一樣,都是先執行skip再limit,如果有sort排序,無論位置先後,最先執行順序 sort再skip再limit。
2 兩種查詢方法:
2.1find((Bson) filter).limit(1).skip(1) 與 find((Bson) filter).skip(1).limit(1)結果一樣
注:先執行skip再limit,所以結果有一條
public static MongoCollection<Document> connect() {
@SuppressWarnings("resource")
MongoClient client = new MongoClient("127.0.0.1", 27017);
MongoDatabase db = client.getDatabase("test");
MongoCollection<Document> collection = db.getCollection("user");
return collection;
}
@Test
public void testLimitSkip1(){
int iid = 3, iid2 = 4;
String name = "";
String nickname = "";
DBObject filter = new BasicDBObject();
if (iid >= 0) {
filter.put("iid", new BasicDBObject("$gte", iid));
}
// 得到iid<=4結果;
// iid>=3條件被覆蓋,Document.append不適合在同一個結果添加多個條件
if (iid2 >= 0) {
if (iid >= 0) {
BasicDBObject[] queryObjectAnd = new BasicDBObject[] { new BasicDBObject("iid", new BasicDBObject("$gte", iid)),
new BasicDBObject("iid", new BasicDBObject("$lte", iid2)) };
filter.put("$and", queryObjectAnd);
} else {
filter.put("iid", new BasicDBObject("$lte", iid2));
}
}
if (name != "") {
filter.put("name",new BasicDBObject("$regex", name));
}
if (nickname != "") {
filter.put("nickname",nickname);
}
List<Document> results = new ArrayList<Document>();
// FindIterable<Document> iterables = connect().find((Bson) filter).skip(1).limit(1);
FindIterable<Document> iterables = connect().find((Bson) filter).limit(1).skip(1);
MongoCursor<Document> cursor = iterables.iterator();
while (cursor.hasNext()) {
results.add(cursor.next());
}
for(Document doc : results){
System.out.println(doc.toJson());
}
}
2.2collection.aggregate(List<\Bson> filter)
2.2.1filter先加skip,後加limit
注:先執行skip再limit,所以該結果有一條
public static MongoCollection<Document> connect() {
@SuppressWarnings("resource")
MongoClient client = new MongoClient("127.0.0.1", 27017);
MongoDatabase db = client.getDatabase("test");
MongoCollection<Document> collection = db.getCollection("user");
return collection;
}
@Test
public void testSkipLimit(){
int iid = 3, iid2 = 4;
String name = "";
String nickname = "";
DBObject filter = new BasicDBObject();
if (iid >= 0) {
filter.put("iid", new BasicDBObject("$gte", iid));
}
// 得到iid<=4結果;
// iid>=3條件被覆蓋,Document.append不適合在同一個結果添加多個條件
if (iid2 >= 0) {
if (iid >= 0) {
BasicDBObject[] queryObjectAnd = new BasicDBObject[] { new BasicDBObject("iid", new BasicDBObject("$gte", iid)),
new BasicDBObject("iid", new BasicDBObject("$lte", iid2)) };
filter.put("$and", queryObjectAnd);
} else {
filter.put("iid", new BasicDBObject("$lte", iid2));
}
}
if (name != "") {
filter.put("name",new BasicDBObject("$regex", name));
}
if (nickname != "") {
filter.put("nickname",nickname);
}
DBObject matchBasicDBObjet = new BasicDBObject("$match", filter);
// DBObject sortBasicDBObjet = new BasicDBObject("$sort", new BasicDBObject("CreateTime",-1));
DBObject skipBasicDBObjet = new BasicDBObject("$skip", 1);
DBObject limitBasicDBObjet = new BasicDBObject("$limit", 1);
List<Bson> listBsons = new ArrayList<Bson>();
listBsons.add((Bson) matchBasicDBObjet);
// listBsons.add((Bson) sortBasicDBObjet);
// 先加skip,後加limit
listBsons.add((Bson) skipBasicDBObjet);
listBsons.add((Bson) limitBasicDBObjet);
List<Document> results = new ArrayList<Document>();
AggregateIterable<Document> iterables = connect().aggregate(listBsons);
MongoCursor<Document> cursor = iterables.iterator();
while (cursor.hasNext()) {
results.add(cursor.next());
}
for(Document doc : results){
System.out.println(doc.toJson());
}
}
2.2.1filter先加limit,後加skip
注:先執行limit再skip,所以該結果有0條
public static MongoCollection<Document> connect() {
@SuppressWarnings("resource")
MongoClient client = new MongoClient("127.0.0.1", 27017);
MongoDatabase db = client.getDatabase("test");
MongoCollection<Document> collection = db.getCollection("user");
return collection;
}
@Test
public void testLimitSkip(){
int iid = 3, iid2 = 4;
String name = "";
String nickname = "";
DBObject filter = new BasicDBObject();
if (iid >= 0) {
filter.put("iid", new BasicDBObject("$gte", iid));
}
// 得到iid<=4結果;
// iid>=3條件被覆蓋,Document.append不適合在同一個結果添加多個條件
if (iid2 >= 0) {
if (iid >= 0) {
BasicDBObject[] queryObjectAnd = new BasicDBObject[] { new BasicDBObject("iid", new BasicDBObject("$gte", iid)),
new BasicDBObject("iid", new BasicDBObject("$lte", iid2)) };
filter.put("$and", queryObjectAnd);
} else {
filter.put("iid", new BasicDBObject("$lte", iid2));
}
}
if (name != "") {
filter.put("name",new BasicDBObject("$regex", name));
}
if (nickname != "") {
filter.put("nickname",nickname);
}
DBObject matchBasicDBObjet = new BasicDBObject("$match", filter);
// DBObject sortBasicDBObjet = new BasicDBObject("$sort", new BasicDBObject("CreateTime",-1));
DBObject skipBasicDBObjet = new BasicDBObject("$skip", 1);
DBObject limitBasicDBObjet = new BasicDBObject("$limit", 2);
List<Bson> listBsons = new ArrayList<Bson>();
listBsons.add((Bson) matchBasicDBObjet);
// listBsons.add((Bson) sortBasicDBObjet);
// 先加limit,後加skip
listBsons.add((Bson) limitBasicDBObjet);
listBsons.add((Bson) skipBasicDBObjet);
List<Document> results = new ArrayList<Document>();
AggregateIterable<Document> iterables = connect().aggregate(listBsons);
MongoCursor<Document> cursor = iterables.iterator();
while (cursor.hasNext()) {
results.add(cursor.next());
}
for(Document doc : results){
System.out.println(doc.toJson()); // 0條結果
}
}