存档

‘MongoDB’ 分类的存档

一个从MongoDB中导出给定日期范围内数据的shell脚本

2017年6月29日 没有评论

前几天介绍了使用mongoexport的使用方法,结合date命令的使用,这里给出一个完整的脚本,用来从MongoDB中导出某个日期范围内的数据,数据导出后从MongoDB中进行删除

#!/bin/sh
#d1, the beginning date, eg:2017-06-28
d1=$1 
d1=`date -d $d1 +%F`
 
#transfer d1 to seconds
d2=`date -d $d1 +%s`
#increase d1 by one day
d2=`expr $d2 + 86400`
#transfer d2 from seconds to day
d2=`date -d @$d2 +%F`

#build query json
qj='{"time":{$gte:ISODate("'"$d1"'T00:00:00Z")}, "time":{$lt:ISODate("'"$d2"'T00:00:00Z")}}'
#export
./mongoexport --db testDB --collection testColl --query="$qj" --fields="userId,userName" --type="csv" --out results"-$d1" --noHeaderLine

#generate js for delete
echo 'var db = connect("testDB");' > delete.js
echo 'db.testColl.remove({"time":{$gte:ISODate("'"$d1"'T00:00:00Z")}, "time":{$lt:ISODate("'"$d2"'T00:00:00Z")}})' >> delete.js
#delete 
./mongo delete.js

备注:如果MongoDB使用的不是默认端口27017,上面的脚本里mongoexport和mongo都需要增加–port参数,并且delete.js中的connect方法也需要指定端口,指定方式为:

var db = connect("127.0.0.1:port/testDB");
分类: MongoDB, Shell 标签: ,

使用mongoexport导出某个时间段内的数据

2017年6月24日 没有评论

mongoexport是MongoDB自带一个数据导出工具,可以方便的导出查询结果。现通过一条命令来演示使用方法,特别是如何查询某个时间段内的数据。

数据库名称:testDB

集合名称:testColl

查询条件:2017-06-12当天的所有记录

导出列:userId, userName

导出文件类型:csv,不含“表头”

./mongoexport –db testDB –collection testColl –query='{“time”:{$gte:ISODate(“2017-06-12T00:00:00Z”)}, “time”:{$lt:ISODate(“2017-06-13T00:00:00Z”)}}’ –fields=”userId,userName” –type=”csv” –noHeaderLine –out results

请注意加粗参数的用法。

–query:指定查询条件,多个条件可以进行and或or的逻辑组合。此处组合了起止时间。

–fields:指定输出字段,默认输出全部字段

–noHeaderLine:不输出字段名称

官方文档指出:export不适于用作生产环境的全库数据备份,请使用mongodump进行全库备份。

分类: MongoDB 标签:

MongoDB数据库操作和SQL的对比

2015年10月16日 没有评论

MongoDB想交其他NoSQL的一个优点在于支持丰富的查询操作,这些操作对关系数据库用户来说并不陌生。

官网通过例子对两者做了对比,清晰明了。请移步这里

分类: MongoDB, 数据库, 资料 标签: ,

MongoDB c++驱动安装与使用

2015年9月15日 1 条评论
  1. 安装
    • 获取源码:git clone https://github.com/mongodb/mongo-cxx-driver.git,解压
    • 安装编译工具scons:yum install -y scons
    • 编译:进入mongo-cxx-driver目录,执行:scons –prefix=/home/work/mongo/ –sharedclient install
    • 驱动已被安装在/home/work/mongo中
  2. 使用
    • 编译示例程序
      #include <cstdlib>
      #include <iostream>
      #include "mongo/client/dbclient.h" // for the driver
      
      void run() {
        mongo::DBClientConnection c;
        c.connect("localhost");
      }
      
      int main() {
          mongo::client::initialize();
          try {
              run();
              std::cout << "connected ok" << std::endl;
          } catch( const mongo::DBException &e ) {
              std::cout << "caught " << e.what() << std::endl;
          }
          return EXIT_SUCCESS;
      }
    • gcc tutorial.cpp -I./mongo/include -L./lib/ -L./mongo/lib -lmongoclient -Wl,-rpath=./lib/ -o tutorial
    • 上面的编译选项中,mongo、lib与tutorial.cpp位于同一目录,mongo即是第一步中指定的安装目录,lib存放其他依赖库,如boost。
    • 向数据库插入文档

      using mongo::BSONElement;
      using mongo::BSONObj;
      using mongo::BSONObjBuilder;

      BSONObjBuilder b;
      b.append(“Name”, “Liuyj”);
      b.append(“Age”, 30);
      BSONObj p = b.obj();

      try
      {
          c.insert(“Db.UserInfo”, p);
          string err = c.getLastError();
          if(!err.empty())
          {
              cout << “failed to insert into Db.UserInfo: ” << err;
              return 1;
          }
      }
      catch(const mongo::DBException &e)
      {
          cout << “exception occurred: ” << e.toString();

          return 2;
      }

  3. 遇到的问题
    • mongo::client::initialize()出现类似下面的崩溃
      Thread [1] 2560 [core: 2] (Suspended : Signal : SIGSEGV:Segmentation fault) 
              0x7fffffffdd80  
              ~_Function_base() at functional:2,030 0x448930  
              ~function() at functional:2,174 0x448930    
              mongo::client::Options::~Options() at options.h:32 0x448930 
              main() at main.cpp:17 0x43bf66
      stackoverflow的这个帖子给出了答案:应用程序和mongodb驱动使用了不一致的编码选项-std=c++11造成的。去掉这个选项就ok了。
    • 其他
  4. 其他
分类: C/C++, MongoDB, 数据库, 资料 标签: ,

MongoDB学习资料收集

2015年8月28日 没有评论
  1. 什么是MongoDBMongoDB is an open-source document database that provides high performance, high availability, and automatic scaling.开源的文档(json格式)数据库,高性能、高可用、易扩展,支持丰富的查询。
  2. 安装
    • 方法一:很简单,下载对应平台的二进制压缩包,解压即可。可执行程序放在bin子目录里。
    •  方法二:通过yum安装
      • 配置yum库
        • 创建MongoDB库文件/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 install -y mongodb-org
  3. 运行
    • 通过方法一安装:进入bin子目录,创建data/db目录,执行./mongod –dbpath ./data/db
    • 通过方法二安装:service mongod start。如果无法运行,查看运行日志/var/log/mongodb/mongod.log来排除问题
  4. 使用
    • 命令行工具mongo,由于MongoDB一定程度上和MySQL相似,其命令行工具也和mysql使用方法类似
    • 推荐一个GUI工具:MongoVUE
    • 增删改查(CRUD
    • 博客园里有个入门文章,简单明了。看这里
  5. 更多详细用法

more…

分类: MongoDB, 开发, 数据库 标签: ,