mongo-java-driver是mongodb提供的官方开发包。目前最新版本341。
Document/MongoCollection/MongoDatabase
300版本以后推荐使用
DBObject/DBCollection/DB
300版本以前的残余物,300版本以后不推荐使用
由于不可知的历史原因spring-data-mongodb的195RELEASE版本中的MongoTemplate类和MongoOperations接口等相关方法类使用的依然是DBObject/DBCollection/DB。
spring-data-mongodb是spring组织在mongo-java-driver的基础上进行进一步封装的开发包。
本文章所描述的开发环境就是基于spring-data-mongodb的195RELEASE版本
maven配置
<dependency>
<groupId>orgmongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>341</version>
</dependency>
<dependency>
<groupId>orgspringframeworkdata</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>195RELEASE</version>
</dependency>
1
2
3
4
5
6
7
8
9
10
创建
private static MongoOperations createMongoOperations(String[] hosts, String databaseName,
String username, String admindb, String password,
ReadPreference readPreference) {
List<ServerAddress> seeds = new ArrayList<ServerAddress>();
List<MongoCredential> credentials = new ArrayList<MongoCredential>();
MongoCredential mongoCredential = MongoCredentialcreateCredential(username, admindb, passwordtoCharArray());
for (String host : hosts) {
String[] tmphost = hostsplit(":");
if (tmphostlength > 1 && tmphost[1]length() > 0)
seedsadd(new ServerAddress(tmphost[0], IntegerparseInt(tmphost[1])));
else
seedsadd(new ServerAddress(tmphost[0]));
credentialsadd(mongoCredential);
}
MongoTemplate mongoTemplate = new MongoTemplate(new MongoClient(seeds, credentials),
databaseName);
mongoTemplatesetReadPreference(readPreference);
return mongoTemplate;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
插入insert
插入单条数据
User user = new User()setName("zhangsan")setAge(22)setSex("man");
mongoOperationinsert(user);
1
2
插入批量数据
List list = new ArrayList<>();
listadd(user1);
listadd(user2);
User user = new User()setName("zhangsan")setAge(22)setSex("man");
mongoOperationinsert(list,Userclass);
1
2
3
4
5
查询find
查询所有数据
mongoOperationfindAll(Userclass);
1
查询特定数据
Criteria criteria = Criteriawhere("name")is("zhangsan");
Query query = Queryquery(criteria);
mongoOperationfind(query,Userclass);
1
2
3
查询特定数据并排序
Criteria criteria = Criteriawhere("sex")is("man");
Query query = Queryquery(criteria)with(new Sort(SortDirectionASC, "age"));
mongoOperationfind(query,Userclass);
1
2
3
查询特定数据并排序
Criteria criteria = Criteriawhere("sex")is("man");
Query query = Queryquery(criteria)with(new Sort(SortDirectionASC, "age"));
mongoOperationfind(query,Userclass);
1
2
3
查询特定数据并指定返回的需要的字段
Criteria criteria = Criteriawhere("sex")is("man");
Query query = Queryquery(criteria)with(new Sort(SortDirectionASC, "age"));
queryfields()include("name");
mongoOperationfind(query,Userclass);
1
2
3
4
更新update
更新单条数据
Criteria criteria = Criteriawhere("name")is("zhangsan");
Query query = Queryquery(criteria);
Update update = new Update()set("age",30);
mongoOperationupdateFirst(query, update, Userclass);
1
2
3
4
更新多条数据
Criteria criteria = Criteriawhere("name")is("zhangsan");
Query query = Queryquery(criteria);
Update update = new Update()set("age",30);
mongoOperationupdateMulti(query, update, Userclass);
1
2
3
4
更新如果不存在则新增
Criteria criteria = Criteriawhere("name")is("zhangsan");
Query query = Queryquery(criteria);
Update update = new Update()set("age",30);
mongoOperationupsert(query, update, Userclass);
1
2
3
4
只会将update中的字段新增到mongodb中,即:
{
"_id" : ObjectId("586df305e617c85d0e984e6a"),
"age" : 30
}
如果需要将name字段也保存可以这样:
Criteria criteria = Criteriawhere("name")is("zhangsan");
Query query = Queryquery(criteria);
Update update = new Update()set("name","zhangsan")set("age",30);
mongoOperationupsert(query, update, Userclass);
您好,很高兴能帮助您
1获取mongoDB中数据库的大小命令
use
dbstats()
显示信息如下
>dbstats()
{
"collections":3,"objects":80614,"dataSize":21069700,"storageSize":39845376,"numExtents":9,"indexes":2,"indexSize":6012928,"ok":1
}
其中storage表示的就是数据库的大小,显示出的数字的单位是字节,因此如果需要转换单位为KB需要除以1024
2获取MongoDB中collection
dbcollectiondataSize()
//collection中的数据大小
dbcollectionstorageSize()
//为collection分配的空间大小,包括未使用的空间
dbcollection()
collection中索引数据大小
dbcollectiontotalSize()
collection中索引data所占空间
你的采纳是我前进的动力,记得好评和采纳,答题不易,互相帮助,
1
下载mongodb的windows版本,有32位和64位版本,根据系统情况下载
2
创建数据库文件的存放位置,比如D:/mongodb/data/db。启动mongodb服务之前需要必须创建数据库文件的存放文件夹,否则命令不会自动创建,而且不能启动成功。默认文件夹路径为c:/data/db使用系统默认文件夹路径时,启动服务无需加--dbpath 参数说明,但文件夹还要手工创建
3
打开cmd命令行,进入D:/mongodb/bin目录,输入如下的命令启动mongodb服务:
D:/mongodb/bin>mongodexe --dbpath D:/mongodb/data/db
4
再打开一个cmd输入:D:/mongodb/bin>mongo 127001/admin,或者双击mongoexe,即可进行mongodb的客户端命令 *** 作了:
MongoDB 安装sudo apt-key adv --keyserver hkp://keyserverubuntucom:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
#下面命令针对ubuntu1604版本,在其他ubuntu版本系统请查看MongoDB官网
echo "deb [ arch=amd64,arm64 ] >## 一、搭建本地开发环境
1、[安装HomeBrew](>
慎用local数据库
local数据库,从名字可以看出,它只会在本地存储数据,即local数据库里的内容不会同步到副本集里其他节点上去;目前local数据库主要存储副本集的配置信息、oplog信息,这些信息是每个Mongod进程独有的,不需要同步到副本集种其他节点。
在使用MongoDB时,重要的数据千万不要存储在local数据库中,否则当一个节点故障时,存储在local里的数据就会丢失。
另外,对于重要的数据,除了不能存储在local数据库,还要注意MongoDB默认的WriteConcern是{w: 1},即数据写到Primary上(不保证journal已经写成功)就向客户端确认,这时同样存在丢数据的风险。对于重要的数据,可以设置更高级别的如{w: "majority"}来保证数据写到大多数节点后再向客户端确认,当然这对写入的性能会造成一定的影响。
慎用admin数据库
当Mongod启用auth选项时,用户需要创建数据库帐号,访问时根据帐号信息来鉴权,而数据库帐号信息就存储在admin数据库下。
mongo-9551:PRIMARY> use admin
switched to db admin
mongo-9551:PRIMARY> dbgetCollectionNames()
[ "systemusers", "systemversion" ]
systemversion存储authSchema的版本信息
systemusers存储了数据库帐号信息
如果用户创建了自定义的角色,还会有systemroles集合
用户可以在admin数据库下建立任意集合,存储任何数据,但强烈建议不要使用admin数据库存储应用业务数据,最好创建新的数据库。
admin数据库里的systemusers、systemroles2个集合的数据,MongoDB会cache在内存里,这样不用每次鉴权都从磁盘加载用户角色信息。目前cache的维护代码,只有在保证systemusers、systemroles的写入都串行化的情况下才能正确工作,详情参考官方issue SERVER-16092
从代码中我们可以看出,MongoDB将将admin数据库上的意向写锁(MODE_IX)直接升级为写锁(MODE_X),也就是说admin数据库的写入 *** 作的锁级别只能到DB级别,不支持多个collection并发写入,在写入时也不支持并发读取。如果用户在admin数据库里存储业务数据,则可能遭遇性能问题。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)