我是 MongoDB 的初学者,我正在尝试一些东西。我想存储 URL 并避免重复的 URL,我在 url 上创建了一个唯一索引。像那样
collection.createIndex(new BasicDBObject("url", type).append("unique", true));
但是每次我启动我的程序时,索引都会再次创建,不是吗?
因为,现在我的程序只插入一个 url “http://site.com”,如果我重新启动我的程序,这个 url 就像没有索引一样再次插入。
每次创建索引是处理索引的错误方法吗?
这是我的代码示例
mongo.getCollection().ensureIndex(new BasicDBObject("url", 1).append("unique", "true"));
mongo.getCollection().insert(new BasicDBObject("url", "http://site.com").append("crawled", 0));
mongo.getCollection().insert(new BasicDBObject("url", "http://site.com").append("crawled", 0));
和输出:
{ "_id" : { "$oid" : "50d627cf44ae5d6b5e9cf106"} , "url" : "http://site.com" , "crawled" : 0}
{ "_id" : { "$oid" : "50d627cf44ae5d6b5e9cf107"} , "url" : "http://site.com" , "crawled" : 0}
谢谢
编辑 :
这是我处理 MongoDB 的 Mongo 类 import java.net.UnknownHostException; 导入 java.util.List;导入 java.util.Set;
导入 com.mongodb.BasicDBObject;导入com.mongodb.DB;导入 com.mongodb.DBCollection;导入 com.mongodb.DBObject;导入 com.mongodb.MongoClient;
public class Mongo {
    private MongoClient mongoClient;
    private DB db;
    private DBCollection collection;
    private String db_name;
    public Mongo(String db){
        try {
            mongoClient = new MongoClient( "localhost" , 27017 );
            this.db = mongoClient.getDB(db);
            this.db_name = db;
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
    public void drop(){
        mongoClient.dropDatabase(db_name);
    }
    public void listCollections(){
        Set<String> colls = db.getCollectionNames();
        for (String s : colls) {
            System.out.println(s);
        }
    }
    public void listIndex(){
         List<DBObject> list = collection.getIndexInfo();
            for (DBObject o : list) {
                System.out.println("\t" + o);
            }
    }
    public void setCollection(String col){
        this.collection = db.getCollection(col);
    }
    public void insert(BasicDBObject doc){
        this.collection.insert(doc);
    }
    public DBCollection getCollection(){
        return collection;
    }
    public void createIndex(String on, int type){
        collection.ensureIndex(new BasicDBObject(on, type).append("unique", true));
    }
}
这是我的课程处理我的程序
public class Explorer {
    private final static boolean DEBUG = false;
    private final static boolean RESET = false;
    private Mongo mongo;
    private String host;
    public Explorer(String url){
        mongo = new Mongo("explorer");
        mongo.setCollection("page");
        if (RESET){
            mongo.drop();
            System.out.println("Set RESET to FALSE and restart the program.");
            System.exit(1);
        }
        if (DEBUG) {
            mongo.listCollections();
        }
        this.host = url.toLowerCase();
        BasicDBObject doc = new BasicDBObject("url", "http://site.com").append("crawled", 0);
        mongo.getCollection().ensureIndex(new BasicDBObject("url", 1).append("unique", true));
        mongo.getCollection().insert(new BasicDBObject("url", "http://site.com").append("crawled", 0));
        mongo.getCollection().insert(new BasicDBObject("url", "http://site.com").append("crawled", 0));
        process();
    }
    private void process(){
        BasicDBObject query = new BasicDBObject("crawled", 0);
        DBCursor cursor = mongo.getCollection().find(query);
        try {
            while(cursor.hasNext()) {
                System.out.println(cursor.next());
            }
        } finally {
            cursor.close();
        }
    }
}