Loading...
My Blog 我的工作和学习笔记

关于mongoDB的一些常用查询语句

mongoDB笔记 2017/08/31 MongoDB

模糊查询:

db.collectionsName.find({"tname": {$regex: '测试', $options:'i'}}) 

db.collectionsName.find({"tname": {$regex:/测试.*/i}}) 


降序排序:

db.collectionsName.find({}}).sort({"createAt":-1})


升序排序:

db.collectionsName.find({}}).sort({"createAt":1})


通过Spring Data MongoDB向mongoDB GridFs 存储图片

mongoDB笔记 2016/01/18 Spring Framework , MongoDB

开篇说明

  GridFS会将大文件对象分割成多个小的chunk(文件片段),一般为256k/个,每个chunk将作为mongodb的一个文档(document)被存储在chunks集合中..gridfs模块会为每个文件创建chunks和files信息.每个文件的实际内容被存在chunks(二进制数据)中,和文件有关的meta数据(filename,content_type,还有用户自定义的属性)将会被存在files集合中.files集合中的文档就是BSON格式,可以使用mongodb的索引等等特性。

    对于GridFS文件的web访问方式,大家可以搜索一下Gridfs + nginx,既可获取相应的信息..


具体步骤

1、在applicationContext-mongodb.xml配置文件中添加GridFsTemplate配置:

	<!-- GridFsTemplate -->
	<mongo:mapping-converter id="converter" />
	<bean class="org.springframework.data.mongodb.gridfs.GridFsTemplate">
	    <constructor-arg ref="mongoDbFactory" />
	    <constructor-arg ref="converter" />
	    <constructor-arg value="imethan_sys_fs" /><!-- 指定GridFS Collections名称 -->
	</bean>


2、创建文件存取测试客户端,代码如下:

package cn.imethan.mongodb;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.gridfs.GridFsOperations;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.gridfs.GridFSDBFile;
import com.mongodb.gridfs.GridFSFile;

/**
 * GridFsClient.java
 *
 * @author Ethan Wong
 * @since JDK 1.7
 * @datetime 2016年1月18日下午3:03:02
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:/main/applicationContext.xml", "classpath:/mongodb/applicationContext-mongodb.xml" })
public class GridFsClient {
	
	@Autowired
	private GridFsOperations gridFsOperations;
	
	/**
	 * 保存测试
	 * 
	 * @author Ethan Wong
	 * @datetime 2016年1月18日下午3:51:28
	 */
	@Test
	public void storeFileToGridFs() {
		DBObject metaData = new BasicDBObject();
		metaData.put("extra1", "anything 1");
		metaData.put("extra2", "anything 2");
		InputStream inputStream = null;
		try {
			inputStream = new FileInputStream("C:/Users/ETHAN/Pictures/e.png");
			GridFSFile gridFSFile = gridFsOperations.store(inputStream, "e.png", "image/png", metaData);
			System.out.println("gridFSFile:"+gridFSFile.toString());
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} finally {
			if (inputStream != null) {
				try {
					inputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		System.out.println("Done");
	}
	
	/**
	 * 读取测试
	 * 
	 * @author Ethan Wong
	 * @datetime 2016年1月18日下午3:51:28
	 */
	@Test
	public void findFilesInGridFs() {
		List<GridFSDBFile> result = gridFsOperations.find(new Query().addCriteria(Criteria.where("filename").is("e.png")));
		for (GridFSDBFile file : result) {
			try {
				System.out.println(file.getFilename());
				System.out.println(file.getContentType());
				//save as another image
				file.writeTo("C:/Users/ETHAN/Pictures/e1.png");
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		System.out.println("Done");
	}
}


3、登录mongoDB查看结果

db.getCollection('imethan_sys_file.files').find({})

/* 1 */
{
    "_id" : ObjectId("569c9831c6a346b44944e6e8"),
    "chunkSize" : NumberLong(261120),
    "length" : NumberLong(3327),
    "md5" : "879a908fd59d7419b42d43e389886a0b",
    "filename" : "e.png",
    "contentType" : "image/png",
    "uploadDate" : ISODate("2016-01-18T07:45:53.828Z"),
    "aliases" : null,
    "metadata" : {
        "extra1" : "anything 1",
        "extra2" : "anything 2"
    }
}


db.getCollection('imethan_sys_file.chunks').find({})

/* 1 */
{
    "_id" : ObjectId("569c9831c6a346b44944e6e9"),
    "files_id" : ObjectId("569c9831c6a346b44944e6e8"),
    "n" : 0,
    "data" : { "$binary" : "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", "$type" : "00" }
}


参考文档

http://docs.spring.io/spring-data/data-mongo/docs/1.8.2.RELEASE/reference/html/#gridfs

http://www.mkyong.com/mongodb/spring-data-mongodb-save-binary-file-gridfs-example/


Spring Framework项目集成Spring Data MongoDB

mongoDB笔记 2015/12/18 Spring Framework , MongoDB

以下简要记录Spring Framework项目集成Spring Data MongoDB的过程步骤

#首先引入依赖的类库,Spring Framework项目使用的是Gradle构建工具,所以依赖引入如下:

    //Spring data mongodb begin
    compile 'org.springframework.data:spring-data-mongodb:1.8.0.RELEASE'
    compile 'com.mysema.querydsl:querydsl-apt:3.6.7'
    compile 'com.mysema.querydsl:querydsl-mongodb:3.6.7'
    //Spring data mongodb end
    
    //mongodb driver begin
    compile 'org.mongodb:mongo-java-driver:2.12.3'
    //mongodb driver end
    
   //需要引入测试依赖包
   testCompile 'org.springframework:spring-test:4.2.1.RELEASE'
   //引入junit依赖包
   testCompile group: 'junit', name: 'junit', version: '4.+'


#添加mongodb配置文件applicationContext-mongodb.xml,配置文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.8.xsd" 
default-lazy-init="false">
<description>applicationContext</description>

<mongo:mongo host="${mongo.host}" port="${mongo.port}">
<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}" slave-ok="${mongo.slaveOk}"
write-number="1" write-timeout="0" write-fsync="true" />
</mongo:mongo>

<!-- Factory bean that creates the Mongo instance -->
<mongo:db-factory dbname="${mongo.databaseName}" mongo-ref="mongo" username="${mongo.username}" password="${mongo.password}" />

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
</bean>

<mongo:repositories base-package="cn.imethan" mongo-template-ref="mongoTemplate"
base-class="cn.imethan.common.mongodb.BaseRepositoryImpl" />

<!-- Use this post processor to translate any MongoExceptions thrown in @Repository annotated classes -->
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
<!-- Enabling Spring Data web support in XML -->
<bean class="org.springframework.data.web.config.SpringDataWebConfiguration" />
</beans>


#添加属性配置文件mongo.properties,配置文件内容如下:

#local mongo db 
mongo.host=127.0.0.1
mongo.port=27017
mongo.username=
mongo.password=
mongo.databaseName=test

mongo.connectionsPerHost=8
mongo.threadsAllowedToBlockForConnectionMultiplier=4
mongo.connectTimeout=1000
mongo.maxWaitTime=1500
mongo.autoConnectRetry=true
mongo.socketKeepAlive=true
mongo.socketTimeout=1500
mongo.slaveOk=true


#增加通用基础Repository接口BaseRepository和Repository接口实现类BaseRepositoryImpl

/**
 * BaseRepository.java
 *
 * @author Ethan Wong
 * @since JDK 1.7
 * @datetime 2015年9月30日下午6:06:15
 */
@NoRepositoryBean
public interface BaseRepository<T, ID extends Serializable> extends MongoRepository<T, ID> {
/**
* Get {@link MongoOperations}.
* @return
*
* @author Ethan Wong
* @datetime 2015年10月1日上午5:38:14
*/
public MongoOperations getMongoOperations();
/**
* Get {@link MongoEntityInformation}.
* @return
*
* @author Ethan Wong
* @datetime 2015年10月1日上午5:39:49
*/
public MongoEntityInformation<T, ID> getMongoEntityInformation();
}
/**
 * BaseRepositoryImpl.java
 *
 * @author Ethan Wong
 * @since JDK 1.7
 * @datetime 2015年9月30日下午6:08:09
 */
public class BaseRepositoryImpl<T, ID extends Serializable> extends SimpleMongoRepository<T, ID>implements BaseRepository<T, ID> {

private MongoOperations mongoOperations;
private MongoEntityInformation<T, ID> metadata;

public BaseRepositoryImpl(MongoEntityInformation<T, ID> metadata, MongoOperations mongoOperations) {
super(metadata, mongoOperations);
this.mongoOperations = mongoOperations;
this.metadata = metadata;
}

@Override
public MongoOperations getMongoOperations() {
return mongoOperations;
}

@Override
public MongoEntityInformation<T, ID> getMongoEntityInformation() {
return metadata;
}
}


#以上基础配置完成,以下开始测试

#添加自定义Repository接口

/**
 * ChannelRepository.java
 *
 * @author Ethan Wong
 * @time 2014年3月2日下午4:44:45
 */
@Repository
public interface ChannelRepository extends MongoRepository<Channel, String>,
ChannelRepositoryCustom<Channel, String>, BaseRepository<Channel, String> {
/**
* @see http://docs.spring.io/spring-data/data-mongo/docs/1.8.0.RELEASE/reference/html/
*
* @author Ethan Wong
* @datetime 2015年10月1日上午5:21:48
*/
Long countByTitle(String title);
Long deleteByTitle(String title);

List<Channel> removeByTitle(String title);
List<Channel> findByTitle(String title);
List<Channel> findByTitle(String title, Sort sort);

Page<Channel> findByTitle(String title, Pageable pageable);
//Slice<Channel> findByTitle(String title, Pageable pageable);
//List<Channel> findByTitle(String title, Pageable pageable);
List<Channel> findTop3ByTitle(String title, Pageable pageable);
List<Channel> findFirst10ByTitle(String title, Sort sort);


List<Channel> readAllByTitleNotNull();
}


# Channel类:

/**
 * Channel.java
 *
 * @author Ethan Wong
 * @time 2014年3月2日下午4:44:32
 */
@Document
public class Channel extends BaseDocument implements Serializable{

private static final long serialVersionUID = -3919470868083141326L;
private String title;//标题
private String describe;//描述

public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescribe() {
return describe;
}
public void setDescribe(String describe) {
this.describe = describe;
}
}


#添加单元测试类ChannelRepositoryTest,其中applicationContext.xml为Spring Framework的配置文件

/**
 * ChannelRepositoryTest.java
 *
 * @author Ethan Wong
 * @time 2014年3月12日下午2:39:27
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/main/applicationContext.xml",
"classpath*:/mongodb/applicationContext-mongodb.xml"
})
public class ChannelRepositoryTest {
@Autowired
private ChannelRepository channelRepository;

     @Test
public void testQuery(){
String name = channelRepository.getDbName();
System.out.println("name:"+name);
Pageable  pageable  = new PageRequest(0,10,Direction.DESC,"createTime");
String title = "标题1";
long count = channelRepository.countByTitle(title);
System.out.println("count:"+count);
List<Channel> list = channelRepository.findByTitle(title);
System.out.println("list:"+list);
List<Channel> list1 = channelRepository.findTop3ByTitle(title, pageable);
System.out.println("list1:"+list1);
List<Channel> list2 = channelRepository.readAllByTitleNotNull();
System.out.println("list2:"+list2);
MongoTemplate mongoTemplate = (MongoTemplate) channelRepository.getMongoOperations();
List<Channel> list3 = mongoTemplate.findAll(channelRepository.getMongoEntityInformation().getJavaType());
System.out.println("list3:"+list3);
Query query = new Query(Criteria.where("title").is(title));
Update update = new Update().set("describe", "随便更新点什么");
Channel channel = mongoTemplate.findAndModify(query, update, Channel.class);
System.out.println("channel:"+channel);
}
}



#参考文档

http://docs.spring.io/spring-data/data-mongo/docs/1.8.0.RELEASE/reference/html/

http://docs.spring.io/spring/docs/4.1.7.RELEASE/spring-framework-reference/htmlsingle/



CentOS 6.7安装Mongodb并且配置用户权限

mongoDB笔记 2015/12/18 CentOS , MongoDB

MongoDB安装

//添加repo文件

vi /etc/yum.repos.d/mongodb-org-3.0.repo

[mongodb-org-3.0]

name=MongoDB Repository

baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/

gpgcheck=0

enabled=1


//yum安装,安装成功后的默认端口为27017

yum install -y mongodb-org


//启动

/etc/rc.d/init.d/mongod start|stop|status|restart


//mongo本地连接

mongo


//远程连接

mongo 127.0.0.1/admin -u username -p password


开启权限AUTH

//默认安装启动的mongodb,没有设置auth,开启auth前,创建管理用户:siteUserAdmin、siteRootAdmin

use admin

db.createUser({user:"siteUserAdmin",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]});

db.createUser({user:"siteRootAdmin",pwd:"123456",roles:[{role:"root",db:"admin"}]});


//编辑配置文件,开启auth,并且重启

vi /etc/mongod.conf

auth=true

/etc/rc.d/init.d/mongod restart


用户权限管理

//登录

mongo

use admin

useadmindb.auth("siteRootAdmin","123456");


//查看数据库

show dbs


//创建collection

db.createCollection("log")


//插入记录

use log

db.loginfo.insert(

   {

     item: "ABC1",

     details: {

        model: "14Q3",

        manufacturer: "XYZ Company"

     },

     stock: [ { size: "S", qty: 25 }, { size: "M", qty: 50 } ],

     category: "clothing"

   }

)

//查看记录

show collections


//查询记录

db.loginfo.find()


//创建用户,mongodb在对应数据创建的用户,只能登录对应的数据库登录

db.createUser({user:"loguser",pwd:"123456",roles:[{role:"dbOwner",db:"log"}]})


//查看用户

show users


//配置角色

db.grantRolesToUser( "loguser" , [ { role: "readWrite", db: "log" } ]) 


//删除角色

db.revokeRolesFromUser( "loguser" , [ { role: "readWrite", db: "from_mysql" } ])  


//查看用户信息

db.getUser("loguser")


//查看角色信息

db.getRole("readWrite",{showPrivileges:true})


//修改密码

db.changeUserPassword("loguser","1234567890")


//删除用户

db.dropUser("loguser")


//无限制角色用户创建

useadmindb.createUser({user:"root",pwd:"123456",roles:["root"]})

useadmindb.createUser({user:"system",pwd:"123456",roles:["__system"]})



参考

http://docs.mongodb.org/manual/

//mongo内置角色

http://docs.mongodb.org/manual/reference/built-in-roles/

//mongo shell命令参考

http://docs.mongodb.org/manual/reference/method/