java使⽤原⽣语句操作mongo_Mongo数据库基础知识总结
(持续更新)
⼀、MongoDB的下载及本地的安装
1.下载:Downloads for linux
2.安装路径: 如 E:MongoDB
3.安装后的配置:(注意cd 命令不能换盘符,直接输⼊E: 即可换盘符)
在E:MongoDB下新建data⽂件夹
在E:MongoDBdata下新建db和log⽂件夹
在E:MongoDBdatalog下新建MongoDB.log⽂件
4.启动:
进⼊E:MongoDBbin ,输⼊:
mongod --dbpath E:MongoDBdatadb
当输出信息出现如下⽇志时,代表安装成功:
2018-06-10T14:55:37.044+0800 I NETWORK [initandlisten] waiting for connections on port 27017
5.设置为windows服务(总结)
可以通过如下命令启动:(当mongo不能运⾏时,也可以通过此命令在指定路径运⾏)
< --logpath E:mongodblogsmongodb.log --logappend --dbpath E:mongodbdata --directoryperdb --serviceName MongoDB --install
也可以通过任务管理器启动:
Tips:当出现"特定服务错误代码100",可以删除data⽂件夹下的mongod.lock和storage.bson。
⼆、MongoDB的知识点
1.match.append("type", "test").append("picture.0",new Document("$exists",true));
.append("picture.0",new Document("$ne",null))
只選擇 type類型為"test"的员⼯,以及存在"picture"这⼀项的⼈员。
2. Mongodb正则表达式$regex操作符。
Java中的⽤法: new Document("$regex", Test).append("$options", "i");
Mongo中的⽤法: db.person.find({"BG":{$regex:"tEst",$options:"$i"}});
3.MongoDB的索引与查询优化
索引通常能够极⼤的提⾼查询的效率。在系统中使⽤查询时,应该考虑建⽴相关索引。但当需要修改数据时,由于需要增加相应字段索引的写⼊,所以修改数据时,时间会略微增加
单字段索引 : MongoDB默认为所有集合创建⼀个_id字段的单字段索引,该索引唯⼀,且 . 不能删除(_id为集合的主键)
单字段索引 :
索引的创建⽅法:
查询索引:
Indexes() // 查询集合的索引信息
查询结果 :(??、)
对有索引的查询选择器进⾏解释:
{
"user" : "BtreeCursor name_1",//表⽰该查询⽤到了索引
"isMultiKey" : false,//未使⽤多键复合索引
"n" : 10, //查询选择匹配到的记录数量
"nscannedObjects" : 10,//执⾏查询扫描到的⽂档对象数量
"nscanned" : 10, //扫描到的⽂档或索引总数
"nscannedObjectsAllPlans" : 10,//扫描⽂档总数在所有查询计划中
"nscannedAllPlans" : 10, //在所有查询计划中扫描的⽂档或索条⽬的总数量
"scanAndOrder" : false, //从游标取出查询到的数据时,是否对数据进⾏排序
"indexOnly" : false,
"nYields" : 0, //产⽣的读锁数
"nChunkSkips" : 0,
"millis" : 0, //查询耗时(ms)
"indexBounds" : {
"name" : [
[
"wangwu",
"wangwu"
时间正则表达式java]
]
},
"server" : "raspberrypi:27017"
}
删除索引
删除指定的索引dropIndex()
db.COLLECTION_NAME.dropIndex("INDEX-NAME")
删除所有索引dropIndexes()
db.COLLECTION_NAME.dropIndexes()
复合索引
对多个字段同时添加索引,复合索引⽀持匹配多个字段的查询。
查询索引结果:
使⽤索引⽰例:
{ "_id" : ObjectId("589835c41c85cb68725f739b"), "id" : 2, "name" : "wangwu", "age" : 11 }解释执⾏⽰例:
{
"user" : "BtreeCursor id_1_age_1",
"isMultiKey" : false,
"n" : 2,
"nscannedObjects" : 2,
"nscanned" : 4,
"nscannedObjectsAllPlans" : 5,
"nscannedAllPlans" : 9,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
"id" : [
[
-1.7976931348623157e+308,
5
]
],
"age" : [
[
12,
1.7976931348623157e+308
]
]
},
"server" : "raspberrypi:27017"
}
4 $and 与OR 的⽤法
Mongodb的原⽣语句:
db.database.distinct( "BG",{ $and: [ { "BG": { $ne: "" } }, { "BG": { $ne: null } } ] } );
在Java的语句
Document whereDoc = new Document("BG",loginBg).append("$and",Array.asList(new Document("BU",new Document("$ne","")),new Document("BU",new
⽤下⾯⽅式做循环
List<Object> tem = new ArrayList<Object>();
for(int i=0;i<siteList.size();i++) {
tem.add( new Document("site",new Document("$regex",(i)).append("$options", "i")));
}
(注意: 需要导⼊ import static java.util.Arrays.asList;)
需求:判断A表中的数组是否包含元素,然后将包含元素的数据取出,并选出B表中的数据
List<String> empList = new ArrayList<String>();
empList.add(roleEmpno);
Document matchCor = new Document("adminGroup",new Document("$elemMatch",new Document("$in",empList)));
List<Document> corList = Doc(mongoCollCor, matchCor);
Set<String> corNameList = new HashSet<String>();
BasicDBList condList1 = new BasicDBList();
condList1.add(new BasicDBObject("company",new Document("$ne",null)));
condList1.add(new BasicDBObject("company",new Document("$ne","")));
BasicDBList condList = new BasicDBList();
if(corList!=null&&corList.size()>0) {
for(Document doc:corList) {
if(!StringUtils.String("corName"))){
corNameList.String("corName"));
}
}
for(String str:corNameList) {
condList.add(new BasicDBObject("company",str));
}
}
match.append("$and", Arrays.asList(new Document("$or",condList),new Document("$and",condList1)));
Mongodb的原⽣语句:
'$or':[
{'$and':[{'example.a':{'$gt':1}},{'example.b':{'$gt':2}}]},
{'$and':[{'example.c':{'$gt':3}},{'example.d':{'$gt':4}}]}
]
})
5 $unset 的⽤法,mongo查询某个字段是否存在,并删除记录⾥的这个字段
1..查询person表中,存在feature字段的记录信息:
2.删除person表中,所有的feature、picture字段
删除person表中,存在hrPicture字段且为null的“hrPicture”字段
3.根据条件往表⾥插⼊⼀个字段
db.lecture.update({"creator":"kiosk"},{$set:{"feature":"PDF"}},{multi:true})
6 MongoDB中distinct的详细⽤法。
field -----指定要返回的字段(string)
query-----条件查询(document)
options-----其他的选项(document)
/**
* 查询Collection,筛选出满⾜whereDoc条件的不同的distinctField字段值,
*/
public <T> List<T> getDocDistinctFiled(String collectionName, String distinctField ,Document whereDoc,Class<T> className) { List<T> results= new ArrayList<T>();
try {
MongoCollection<Document> collection= Collection(collectionName);
DistinctIterable<T> distincts = (DistinctIterable) collection.distinct(distinctField, whereDoc, className);
MongoCursor<T> iter = distincts.iterator();
while(iter.hasNext()){
T a = (T) ();
results.add(a);
}
} catch(Exception e) {
e.printStackTrace();
System.out.println("MongoDB getDoc: "+ e.getMessage());
}
return results;
}
7 mongo数据库的各种查询语句⽰例(⽐较全的)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论