时间:2021-07-01 10:21:17 帮助过:20人阅读
MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构
MongoDB使用 createIndex() 方法来创建索引。
在 3.0.0 版本前创建索引方法为 db.collection.ensureIndex(),之后的版本使用了 db.collection.createIndex() 方法,ensureIndex() 还能用,但只是 createIndex() 的别名。
语法:
db.collection.createIndex(keys, options)
语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可
createIndex() 接收可选参数,可选参数列表如下:
Parameter | Type | Description |
---|---|---|
background | Boolean | 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false。 |
unique | Boolean | 建立的索引是否唯一。指定为true创建唯一索引。默认值为false. |
name | string | 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。 |
dropDups | Boolean | 3.0+版本已废弃。在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false. |
sparse | Boolean | 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false. |
expireAfterSeconds | integer | 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。 |
v | index version | 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。 |
weights | document | 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。 |
default_language | string | 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语 |
language_override | string | 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language. |
首先先构造测试数据和测试表格:
使用Java构造表格--->因为循环创建decoment加入List插入集合补会(尴尬)所以使用的是mongodb循环插入--->但是10W条数据只有1000条
package mongodbtest;
?
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
?
import java.util.ArrayList;
import java.util.List;
?
/**
* 1、利用Java连接MongoDB
* 2、连接数据库practice
* 3、创建集合:practiceindex
* 4、向集合中插入10w条记录
* 5、创建索引
* 6、利用索引查询
* @since JDK 1.8
* @date 2021/7/1
* @author Lucifer
*/
public class MongoDBTestNo1 {
?
/*定义连接需要用到的属性*/
private static String MONGO_HOST = "localhost";
private static Integer MONGO_PORT = 27017;
private static final String MONGO_DB_NAME = "practice";
private static final String GATHER_NAME = "practiceindex";
?
public static String getMongoHost() {
return MONGO_HOST;
}
?
public static Integer getMongoPort() {
return MONGO_PORT;
}
?
public static void setMongoHost(String mongoHost) {
MONGO_HOST = mongoHost;
}
?
public static void setMongoPort(Integer mongoPort) {
MONGO_PORT = mongoPort;
}
?
/**
* 访问MongoDB服务,连接到指定的数据库
* @param mongo_host
* @param mongo_port
* @return
*/
public static MongoDatabase connection(String mongo_host, Integer mongo_port){
?
//使用MongoClient类创建Mongo连接服务
MongoClient mongoClient = new MongoClient(mongo_host,mongo_port);
?
//使用服务引用连接到数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase(MONGO_DB_NAME);
System.out.println("Connect to database successfully!!!");
?
//返回Mongodatabase对象
return mongoDatabase;
?
}
?
/**
* 创建集合
* @return
*/
public static String createCollection(){
?
//访问到指定的域名和端口
MongoDatabase mongoDatabase = MongoDBTestNo1.connection(MONGO_HOST, MONGO_PORT);
?
//使用mongoDatabase类创建集合
mongoDatabase.createCollection(GATHER_NAME);
System.