mongoDB包全含查询

场景:

关键词:java多线程使用

需求:得到数据库里某个字段被上面关键词包含的数据,如:多线程、使用、java

多线程比对的工具类

package com.utils.mongo;

import org.bson.Document;

import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongoutil.MongoDBUtil;

import groovy.transform.Synchronized;

/**
 * 针对mongo数据库字段全包含多线程查询工具类
 * 
 * @author leo.li
 *
 */
public class FullInclusionUtil implements Runnable {

    private int start = 0;
    private int limit = 0;
    private String myWord = "";
    MongoCollection<Document> coll = null;

    public FullInclusionUtil(String dbName, String collName, int start, int end) {
        this.start = start;
        this.limit = end;
        coll = MongoDBUtil.instance.getCollection(dbName, collName);
    }

    @Override
    public void run() {
        quyerMongo();
    }

    @Synchronized
    private void quyerMongo() {
        MongoCursor<Document> cursor = coll.find().skip(start).limit(limit).iterator();
        System.out.println(Thread.currentThread().getName());
        int i = 0;
        while (cursor.hasNext()) {
            i++;
            if (QueryStart.result) {
                System.out.println(Thread.currentThread().getName() + "停止" + i);
                return;
            }

            String keyword = cursor.next().getString("keyword");
            System.out.println(Thread.currentThread().getName() + "\t查到结果\t" + keyword + i);
            if (keyword.contains(myWord) || myWord.contains(keyword)) {
                QueryStart.result = true;
                System.out.println(Thread.currentThread().getName() + "\t匹配结果\t" + keyword + i);
            }
        }
    }

}
 

需要将数据查询到内从中,所以我使用了多线程可以快一点

package com.utils.mongo;

public class QueryStart {

    public volatile static boolean result = false;

    public static void main(String[] args) {

        FullInclusionUtil full1 = new FullInclusionUtil("mycol", "emotion", 0, 500);
        Thread thread1 = new Thread(full1, "现程1");
        thread1.start();
        FullInclusionUtil full2 = new FullInclusionUtil("mycol", "emotion", 500, 500);
        Thread thread2 = new Thread(full2, "现程2");
        thread2.start();
    }

}
 

猜你喜欢

转载自blog.csdn.net/cocoaxian/article/details/81333037