mongodb 使用总结
来源:互联网 发布:windows加域脚本 编辑:程序博客网 时间:2024/05/29 10:08
mongodb 前台直接运行建立索引命令的话,将造成整个数据库阻塞,因此索引建议使用 background 的方式建立,尤其是数据量很大的表应该注意,会造成数据库阻塞,影响非常严重
mongo 分页查询排序报错误,数据量小时没有错误,当数据量大时报错误,排序最大32MB的限制
解决方案:对排序字段创建索引即可
You're running into the 32MB limit on an in-memory sort:
http://docs.mongodb.org/manual/reference/limits/#Sorted-Documents
Indexing the sort field allows MongoDB to stream documents to you in sorted order, rather than attempting to load them all into memory on the server and sort them in memory before sending them to the client.
./mongo localhost:27017/admin
db.auth("site","123456")use test1
更新
db.User.update({},{$rename:{"account.id":"account._id"}},{multi:true})删除字段
db.Role.update({},{$unset:{"creator":1}},{multi:true})
Mongodb修改字段名称
db.User.update({mvno:{$exists:true,$nin:[null]}},{$rename:{"mvno.id":"mvno._id"}},{multi:true})
db.User.update({"account.accType.id":{$exists:true,$nin:[null]}},{$rename:{"account.accType.id":"account.accType._id"}},{multi:true})
db.User.update({_id:ObjectId("561b88eedc199e231802267c")},{$set:{username:"test"}})
导出数据指定数据表
./mongoexport -h localhost:27017 -u site -p=123456 --authenticationDatabase admin -d test1 -c Terminal -o /tmp/terminal.dat
导出数据库
./mongod -h localhost:27017 -u site -p=123456 --authenticationDatabase admin -d test1 -o /tmp/datacopy
./mongodump -h localhost:40000 -u site -p=123456 --authenticationDatabase admin -d bssmongodb -o /tmp/datacopy
字段重命名
db.SESSION_2016_9.update({}, {$rename : {"flowsize" : "flowSize"}}, false, true)
导入数据库
./mongorestore -h localhost:27017 -u site -p=123456 --authenticationDatabase admin -d test1 /tmp/datacopy/test2/
{$where: '(this.createTime-1452152974903 > 1000)'} where做运算
./mongostat --host localhost --port 27017 -u site -p 123456 --authenticationDatabase admin --监控mongodb状态
--discover切片信息查看
./mongostat --host localhost --port 27017 -u site -p 123456 --authenticationDatabase admin --discover
./mongostat -h 123.1.20.126:4200 -u site -p 123456 --authenticationDatabase admin
db.DetailRecord.aggregate(
[
{ $match : { "businessId" : "5630851131196b149429ae88"}},
{
$group:
{
_id: {day:"$sessionId"},
totalAmount: { $sum: "$amount"},
count: { $sum: 1 }
}
}
]
)
创建组合索引
db.DetailedRecord.ensureIndex({"createDate":1,"processState":1})
./mongod --port=27017 --dbpath=/usr/local/mongodb/data/mongodb_data/ --logpath=/usr/local/mongodb/data/mongodb_log/mongodb.log --auth --fork
复制集读选项模式
详细说明
primary
默认模式,所有的读操作都在复制集的 主节点 进行的。
primaryPreferred
在大多数情况时,读操作在 主节点 上进行,但是如果主节点不可用了,读操作就会转移到 从节点 上执行。
secondary
所有的读操作都在复制集的 从节点 上执行。
secondaryPreferred
在大多数情况下,读操作都是在 从节点 上进行的,但是当 从节点 不可用了,读操作会转移到 主节点 上进行。
nearest
读操作会在 复制集 中网络延时最小的节点上进行,与节点类型无关。
collection.setReadPreference(ReadPreference.secondaryPreferred());
//at least 2 servers for the write operation 写数据时设置。根据实际情况设置不同的写策略。
collection.setWriteConcern(WriteConcern.REPLICAS_SAFE);
collection.find();
collection.save(document);
集群搭建资料
http://blog.csdn.net/luonanqin/article/details/8497860
Spring 集成配置方式
<mongo:mongo-client replica-set="${mongo.replicaset}"
id="mongoClient" credentials="${mongo.user}:${mongo.password}@${mongo.authenticationdb}">
</mongo:mongo-client>
<mongo:db-factory dbname="${mongo.database}"
mongo-ref="mongoClient" />
<bean id="mappingContext"
class="org.springframework.data.mongodb.core.mapping.MongoMappingContext" />
<!-- 默认Mongodb类型映射 -->
<bean id="defaultMongoTypeMapper"
class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper">
<constructor-arg name="typeKey">
<null /><!-- 这里设置为空,可以把 spring data mongodb 多余保存的_class字段去掉 -->
</constructor-arg>
</bean>
<!-- 配置mongodb映射类型 -->
<bean id="mappingMongoConverter"
class="org.springframework.data.mongodb.core.convert.MappingMongoConverter">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
<constructor-arg name="mappingContext" ref="mappingContext" />
<property name="typeMapper" ref="defaultMongoTypeMapper" />
</bean>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
<constructor-arg name="mongoConverter" ref="mappingMongoConverter" />
</bean>
<!-- 定义mongo对象,对应的是mongodb官方jar包中的Mongo,replica-set设置集群副本的ip地址和端口 -->
<!-- <mongo:mongo id="mongo" replica-set="${mongodb.replica-set}">
一些连接属性的设置
<mongo:options
connections-per-host="${mongo.connectionsPerHost}"
threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"
connect-timeout="${mongo.connectTimeout}"
max-wait-time="${mongo.maxWaitTime}"
auto-connect-retry="${mongo.autoConnectRetry}"
socket-keep-alive="${mongo.socketKeepAlive}"
socket-timeout="${mongo.socketTimeout}"
write-number="1"
write-timeout="0"
write-fsync="true"/>
</mongo:mongo> -->
用户验证:注意事项
为什么我们启用了登录验证模块,但我们登录时没有指定用户,为什么还可以登录
呢?在最初始的时候 MongoDB 都默认有一个 admin 数据库(默认是空的),
而 admin.system.users 中将会保存比在其它数据库中设置的用户权限更大的用户信息。
注意:当 admin.system.users 中没有添加任何用户时,即使 MongoDB 启动时添加了 --auth
参数,如果在除 admin 数据库中添加了用户,此时不进行任何认证依然可以使用任何操作,
直到知道你在 admin.system.users 中添加了一个用户.
副本集加切片部署方案详见:http://blog.csdn.net/angellove156/article/details/20638107
Mongodb权威指南中文版
仲裁节点不需要也可以切换主从,副本集使用奇数个成员
奇数 官方推荐副本集的成员数量为奇数,最多12个副本集节点,最多7个节点参与选举。最多12个副本集节点是因为没必要一份数据复制那么多份,备份太多反而增加了网络负载和拖慢了集群性能;而最多7个节点参与选举是因为内部选举机制节点数量太多就会导致1分钟内还选不出主节点,凡事只要适当就好。这个“12”、“7”数字还好,通过他们官方经过性能测试定义出来可以理解。具体还有哪些限制参考官方文档《 MongoDB Limits and Thresholds 》。 但是这里一直没搞懂整个集群为什么要奇数,通过测试集群的数量为偶数也是可以运行的,参考这个文章http://www.itpub.net/thread-1740982-1-1.html。后来突然看了一篇stackoverflow的文章终于顿悟了,mongodb本身设计的就是一个可以跨IDC的分布式数据库,所以我们应该把它放到大的环境来看。
假设四个节点被分成两个IDC,每个IDC各两台机器,如下图。但这样就出现了个问题,如果两个IDC网络断掉,这在广域网上很容易出现的问题,在上面选举中提到只要主节点和集群中大部分节点断开链接就会开始一轮新的选举操作,不过mongodb副本集两边都只有两个节点,但是选举要求参与的节点数量必须大于一半,这样所有集群节点都没办法参与选举,只会处于只读状态。但是如果是奇数节点就不会出现这个问题,假设3个节点,只要有2个节点活着就可以选举,5个中的3个,7个中的4个。。。
/usr/local/mongodb/bin/mongod --replSet rs2 --keyFile /data/key/r0 --fork --port 28010 --dbpath /data/data/r0 --logpath=/data/log/r0.log --logappend
/usr/local/mongodb/bin/mongod --replSet rs2 --keyFile /data/key/r1 --fork --port 28011 --dbpath /data/data/r1 --logpath=/data/log/r1.log --logappend
/usr/local/mongodb/bin/mongod --replSet rs2 --keyFile /data/key/r2 --fork --port 28012 --dbpath /data/data/r2 --logpath=/data/log/r2.log --logappend
/usr/local/mongodb/bin/mongod --configsvr --keyFile /data/key/config --port 30000 --dbpath /data/configdb --fork --logpath /data/log/config.log --directoryperdb
/usr/local/mongodb/bin/mongos --port 40000 --configdb SZ-MongoDB02:30000 --fork --logpath /data/log/route.log --keyFile /data/key/mongos
/usr/local/mongodb/bin/mongod --replSet rs1 --keyFile /data/key/r0 --fork --port 28010 --dbpath /data/data/r0 --logpath=/data/log/r0.log --logappend
/usr/local/mongodb/bin/mongod --replSet rs1 --keyFile /data/key/r1 --fork --port 28011 --dbpath /data/data/r1 --logpath=/data/log/r1.log --logappend
/usr/local/mongodb/bin/mongod --replSet rs1 --keyFile /data/key/r2 --fork --port 28012 --dbpath /data/data/r2 --logpath=/data/log/r2.log --logappend
/usr/local/mongodb/bin/mongos --port 40000 --configdb SZ-MongoDB02:30000 --fork --logpath /data/log/route.log --keyFile /data/key/mongos
创建用户
db.createUser({
"user" : "test1",
"pwd" : "123456",
"roles" : [
{
"role" : "dbAdmin",
"db" : "test"
},
{
"role" : "readWrite",
"db" : "test"
}
]
}
)
where查询
db.test.find({'$where':'this.createDate-this.endDate>10'});
db.cyl.find({'imei':{$type:18}}).forEach(function(x) {x.imei = String(x.imei);db.cyl.save(x); });
18为long型
- mongodb使用总结1
- mongodb使用总结
- mongodb mapreduce使用总结
- mongodb 使用总结
- Mongodb使用总结
- MongoDB使用总结
- mongodb使用简单总结
- mongodb使用总结
- Mongodb总结4-Spring环境使用Mongodb
- 使用MongoDB类操作MongoDB数据库总结
- MongoDB错误和使用总结
- Mongodb的主从复制使用总结
- MongoDB Replica Set使用几点总结
- Mongodb知识及使用总结(一)
- MongoDB使用总结(C#版 潘鹏)
- Spring MVC中使用Mongodb总结
- nodejs初期开发总结--MongoDB使用常识
- Spring MVC中使用Mongodb总结
- vdsm注册ovirt-engine的log
- linux之shell学习:sort使用
- js校验简单实现
- 193 - Valid Phone Numbers
- 制作无缝滚动的滚动封装好的函数:
- mongodb 使用总结
- Shape
- HDU1071 The area
- time_wait和close_wait状态
- sourceinsight 相对路径设置
- Javascript Math ceil()、floor()、round()三个函数的区别
- Git菜鸟(一)
- 第一篇博客(待删)
- 公交线路免费api接口代码