mongo常用命令及编码例子

groupadd  g_mongo
useradd   -d /var/mongodb  -g  g_mongo  mongo
passwd mongo 
xxxxxx
/var/mongodb/bin/mongo  push_open  --host 10.12.29.81  --port 40000   -u push  -p  --authenticationDatabase push_open

/var/mongodb/bin/mongo 10.12.30.25:3001/push_open -u push_device -p --authenticationDatabase push_open   58f53330234230
mongo --host 172.17.160.208 --port 20000 -u push_device -p push_device@123 --authenticationDatabase push_device  

/var/mongodb/bin/mongo 172.17.160.208:20000/push_device -u push_device -p --authenticationDatabase push_device   push_device@123
db.receipt_stat.find();
show collections

db.device.find({"deviceId":"5b6bff5b3dc4e6580c12241f","appId":"ZngnvJIM7wQusNtbqYnpH6XX"}).pretty()



db.sms_blacklist.find();
db.receipt_stat.find({"day":"20180726"})
show collections
db.auth("push_message","push_message123")

db.app_device.find({"registrationId":"CN_dc7bfcbdfa3e9400175b37f962b3fcf2"})

use push_message;
db.auth("push_device","push_device123");
db.push_task.find({"_id":"71172"}).pretty();
db.sms_blacklist.find().pretty();

db.app_device.find({"appId":"jCbBaqYIpP8eqr4iqYSqcqA1","createTime":{$gt:ISODate("2018-12-07T04:38:31.803Z")}}).limit(1).pretty()

db.receipt_stat.find({"day":"20190227"}, {total: 1, appId: 1, _id:0}).sort({total: -1})
db.receipt_stat.find({"day":"20190227"}, {total: 1, appId: 1, _id:0}).count()


mongoexport  --host 10.13.30.141  --port 3100   -d push_device -c device  --csv  --out device.csv  --fields   _id,imei

db.app_device.getIndexes()
db.app_device.totalIndexSize()

db.runCommand({enablesharding:'push_sms'})
db.runCommand({shardcollection:'push_sms.sms_relation', key:{regId:1}})

日常使用的慢日志(system.profile)查询
#返回最近的10条记录
db.system.profile.find().limit(10).sort({ ts : -1 }).pretty()

#返回最慢的10条记录
db.system.profile.find().limit(10).sort({ millis : -1 }).pretty()

#返回大于5毫秒的慢操作
db.system.profile.find({ millis : { $gt : 5 } } ).pretty()

#返回所有的操作,除command类型的
db.system.profile.find( { op: { $ne : ‘command‘ } }).pretty()

#返回特定集合
db.system.profile.find( { ns : ‘mydb.test‘ } ).pretty()

#查看集合sites索引大小
db.sites.totalIndexSize()
#性能统计
/var/mongodb/bin/mongostat  --host 10.12.30.25  --port 3001 -u root  --authenticationDatabase admin    root/c2ffcabd84301a31508681169f70231e

# 分片
将分片加入集群
 在mongos中sh.addShard方法将分片加入分片集群
sh.addShard("push-bjsm-message-1/10.12.29.101:4000,10.12.29.102:4000,10.12.29.103:4000")
sh.addShard("push-bjsm-message-2/10.12.29.112:4000,10.12.29.113:4000,10.12.29.114:4000")
sh.addShard("push-bjsm-message-3/10.12.29.208:4000,10.12.29.203:4000,10.12.30.13:4000")
sh.addShard("push-bjsm-message-4/10.12.29.90:4000,10.12.29.91:4000,10.12.29.92:4000")
sh.addShard("push-bjsm-message-5/10.12.30.24:4000,10.12.30.25:4000,10.12.30.40:4000")
sh.addShard("push-bjsm-message-6/10.12.30.52:4000,10.12.30.56:4000,10.12.30.66:4000")

使用sh.status方法确认追加的shard是否正确追加了

 

开启分片功能:sh.enableSharding("库名")、sh.shardCollection("<database>.<collection>", { <key> : "hashed" } )

sh.enableSharding("push_open")

db.push_task.createIndex( { appId: 1,_id:1 } ,{background: true})
sh.shardCollection("push_open.push_task", { appId : 1 , _id:1 } )

db.notification.createIndex( { appId: 1,_id:1 } ,{background: true})
sh.shardCollection("push_open.notification", { appId : 1 , _id:1 } )

Demo

方法一 相对灵活


    @Bean("statMongoClientURI")
    public MongoClientURI statMongoClientURI(MongoConfig mongoConfig) {
        String uri = mongoConfig.getStatDbUri();
        MongoClientOptions.Builder optionsBuilder = MongoClientOptions.builder();
        optionsBuilder.connectTimeout(mongoConfig.getStatDbConnectTimeout());
        optionsBuilder.socketTimeout(mongoConfig.getStatDbSocketTimeout());
        optionsBuilder.serverSelectionTimeout(mongoConfig.getStatDbSelectTimeout());
        logger.info("statMongoClientURI:" + uri);
        return new MongoClientURI(uri, optionsBuilder);
    }


    @Bean("statMongoDbFactory")
    public MongoDbFactory statMongoDbFactory(@Qualifier("statMongoClientURI") MongoClientURI mongoClientURI) throws UnknownHostException {
        return new SimpleMongoDbFactory(mongoClientURI);
    }


    @Bean("statMongoTemplate")
    public MongoTemplate statMongoTemplate(@Qualifier("statMongoDbFactory") MongoDbFactory mongoDbFactory) {
        MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory);
        logger.info("statMongoTemplate initialized");
        return mongoTemplate;
    }
package com.xxxx.receipt.mongo.stat;

import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;


@Repository
public class StatDaoImpl implements StatDao {

    @Resource(name = "statMongoTemplate")
    private MongoOperations statMongoTemplate;

    @Override
    public int update(String appId, String day, String field, long inc) throws Exception {
        Criteria criteria = new Criteria();
        criteria.andOperator(Criteria.where("appId").is(appId), Criteria.where("day").is(day));
        return statMongoTemplate.upsert(
                new Query(criteria),
                new Update().inc(field, inc).set("updateTime", System.currentTimeMillis() / 1000),
                StatEntity.class).getN();
    }
}

方法二、相对简单

package com.xxxx.receipt.mongo;

import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;

@Configuration
@EnableMongoRepositories(basePackages = "com.xxxx.receipt.mongo.app", mongoTemplateRef = "statMongoTemplate")
public class StatRepositoriesConfiguration {
}


package com.xxxx.receipt.mongo.app;

import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.stereotype.Repository;

@Repository
public interface AppDeviceRepository extends MongoRepository<AppDeviceEntity, String> {

    @Query(value="{'appId':?0, 'deviceId':?1}", fields = "{'_id':1}")
    AppDeviceEntity findRegistrationId(String appId, String deviceId);
}


@Repository
public class AppDeviceDaoImpl implements AppDeviceDao {
    @Resource
    private AppDeviceRepository deviceRepository;
    
    @Override
    public AppDeviceEntity findRegistrationId(final String appId, final String deviceId) throws Exception {
        return new Tracer<AppDeviceEntity>().execMethodWithTrace(new Tracer.Run<AppDeviceEntity>() {
            @Override
            public AppDeviceEntity doRun() throws RuntimeException {
                return deviceRepository.findRegistrationId(appId, deviceId);
            }
        }, "findRegistrationId", appId + "|" + deviceId);
    }
}
    

StatEntity

package com.xxxx.receipt.mongo.stat;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import java.io.Serializable;
import java.util.Date;

@Document(collection = "receipt_stat")
public class StatEntity implements Serializable {
	@Id
	private String id;

	private String appId;
	private String day;
	private String total;
	private String success;
	private String fail;
	private Date createTime;
	private Date updateTime;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getAppId() {
		return appId;
	}

	public void setAppId(String appId) {
		this.appId = appId;
	}

	public String getDay() {
		return day;
	}

	public void setDay(String day) {
		this.day = day;
	}

	public String getTotal() {
		return total;
	}

	public void setTotal(String total) {
		this.total = total;
	}

	public String getSuccess() {
		return success;
	}

	public void setSuccess(String success) {
		this.success = success;
	}

	public String getFail() {
		return fail;
	}

	public void setFail(String fail) {
		this.fail = fail;
	}

	public Date getCreateTime() {
		return createTime;
	}

	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}

	public Date getUpdateTime() {
		return updateTime;
	}

	public void setUpdateTime(Date updateTime) {
		this.updateTime = updateTime;
	}
}

https://stackoverflow.com/questions/16478101/spring-data-mongo-use-or-in-query
https://www.mkyong.com/mongodb/spring-data-mongodb-query-document/
https://stackoverflow.com/questions/36784017/set-mongo-timeout-in-spring-boot
https://www.cnblogs.com/t2xingzhe/p/3555268.html
https://stackoverflow.com/questions/41766929/spring-mongo-queries-set-custom-timeout

慢查询
https://blog.csdn.net/yisun123456/article/details/78274477

入门+原理
https://draveness.me/mongodb-wiredtiger/
https://cloud.tencent.com/developer/article/1116315
http://www.ttlsa.com/mongodb/how-mongodbs-journaling-works/

以下是常用的MongoDB Shell命令: 1. 数据库操作 - `show dbs`:显示所有数据库 - `use <database_name>`:切换到指定的数据库,如果不存在则创建 - `db.dropDatabase()`:删除当前数据库 2. 集合操作 - `db.createCollection("<collection_name>")`:创建集合 - `db.<collection_name>.drop()`:删除集合 - `show collections`:显示当前数据库中所有的集合 3. 文档操作 - `db.<collection_name>.insert(<document>)`:向指定集合中插入一个或多个文档 - `db.<collection_name>.find()`:查询指定集合中的所有文档 - `db.<collection_name>.find(<query>)`:根据查询条件查询指定集合中的文档 - `db.<collection_name>.findOne(<query>)`:根据查询条件查询指定集合中的第一个匹配的文档 - `db.<collection_name>.update(<query>, <update>)`:根据查询条件更新指定集合中的文档 - `db.<collection_name>.remove(<query>)`:根据查询条件删除指定集合中的文档 4. 索引操作 - `db.<collection_name>.createIndex(<fields>, <options>)`:创建索引 - `db.<collection_name>.getIndexes()`:显示集合中所有的索引 - `db.<collection_name>.dropIndex(<index>)`:删除指定的索引 5. 用户操作 - `db.createUser(<user>)`:创建用户 - `db.updateUser(<user>)`:更新用户信息 - `db.changeUserPassword(<username>, <password>)`:修改用户密码 - `db.dropUser(<username>)`:删除用户 6. 其他操作 - `db.stats()`:显示当前数据库的统计信息 - `db.version()`:显示MongoDB的版本信息 - `db.shutdownServer()`:关闭MongoDB服务器 以上是常用的MongoDB Shell命令,更多命令可以参考MongoDB官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值