1、mongodb shell script mongodb的命令行使用的是类似javascript脚本的命令行交互,所以我们可以在shell当中使用js的一些命令、函数等。 输入mongo命令启动mongo控制台 然后参考官方文档操作mongo数据。 常用命令有 show dbsuse db-nameshow collectionsdb.
1、mongodb shell scriptmongodb的命令行使用的是类似javascript脚本的命令行交互,所以我们可以在shell当中使用js的一些命令、函数等。
输入mongo命令启动mongo控制台
然后参考官方文档操作mongo数据。
常用命令有
show dbsuse db-nameshow collectionsdb.collection.find()db.collection.findone()db.collection.remove(args)db.collection.insert(args)
等。curd操作可以参考官方文档。
如果要生成大量测试数据,我们可以在mongo shell里面写一个for循环,
for (var i = 1; i <= 25; i++) db.testdata.insert( { x : i } )
或者新建一个script.js将脚本放入循环内:
function insertdata(dbname, colname, num) { var col = db.getsiblingdb(dbname).getcollection(colname); for (i = 0; i < num; i++) { col.insert({x:i}); } print(col.count());}
如何运行这个函数呢?有两种方法:1、将其放入~/.mongorc.js这个文件内
2、将其保存为script.js,然后运行mongo控制台时输入如下命令,会得到后台执行:
mongo server:port/dbname --quiet script.js
mongo控制台启动命令还有好多参数,可以参考官方文档。2、利用mongodb jar包编写java代码访问mongo数据库下载mongodb java driver:点击打开链接
添加进java project内。具体api文档可以点击这里。
small task下面以一个任务为例说明用法。
任务描述:定时删除三个月前的article。其中每个article与一个聚类相关联,同时数据库中还有聚类(cluster)的数据信息。每次删除article完成后,删除对应的那些无任何文章关联的聚类。
数据类型如下:
{ _id : objectid(52df7de966f0bc5d1bf4497d), clusterid : 21, docid : 2, title : test article 1, type : article }
任务分析:
1、首先需要依据条件查询到符合“三个月前的”文章数据;
2、提取所有article的id构建成一个列表;
3、提取所有涉及到的cluster的id构建成一个没有重复元素的列表;
4、删除所有满足条件的article;
5、判断每个cluster是否已经为空,若是则进行删除聚类操作。
java代码如下:
import java.net.unknownhostexception;import java.util.arraylist;import java.util.hashset;import com.mongodb.basicdbobject;import com.mongodb.db;import com.mongodb.dbcollection;import com.mongodb.dbcursor;import com.mongodb.dbobject;import com.mongodb.mongo;import com.mongodb.querybuilder;public class mongomaintest { static int today = 0; static int threemonth = 0; static dbobject documentfields = new basicdbobject(); static dbobject clusterfields = new basicdbobject(); static { //此处键值设为true即代表作为返回结果键值 返回 documentfields.put(_id, true); documentfields.put(docid, true); documentfields.put(clusterid, true); documentfields.put(type, true); clusterfields.put(clusterid, true); clusterfields.put(type, true); } // dbcursor cursor = instancedb.find(new basicdbobject(assign, vouch),documentfields); /** * @param args */ public static void main(string[] args) { mongo m = null; try { m = new mongo( 10.211.55.7 , 27017 ); } catch (unknownhostexception e) { e.printstacktrace(); system.exit(0); } db db = m.getdb(clusterdb);// list dbs = m.getdatabasenames();// system.out.println(dbs);// dbcollection coll = db.getcollection(rkcol);// basicdbobject doc = new basicdbobject(docid,2); //此处为书写查询方法一// dbcursor curs = coll.find(doc);// dbobject obj = (dbobject)json.parse({docid: 2}); //书写查询方法二// curs = coll.find(obj);// while(curs.hasnext()) {// system.out.println(cursor count: +curs.count());// system.out.println(curs.next());// } dbcollection coll = db.getcollection(rkcol); querybuilder querybuilder = new querybuilder(); dbobject articlequery = new basicdbobject(type, article)//; .append(timestamp, new basicdbobject($lt, today-threemonth)) .append(clusterid, true); //书写查询方法三 querybuilder.and(articlequery); //书写查询方法四 dbcursor curs = coll.find(querybuilder.get()); //注意方法四在实际使用时需要调用get方法生成具体query语句 arraylist articles = new arraylist(); //此处element类型均为object hashset clusters = new hashset(); dbobject article = null; while(curs.hasnext()) { article = curs.next(); articles.add(article.get(_id)); clusters.add(article.get(clusterid)); } querybuilder removebuilder = new querybuilder(); //注意下句使用了$in操作符,类似于{_id: articleid1} or {_id: articleid2} or {_id: articleid3} ... dbobject removeobject = new basicdbobject(_id, new basicdbobject($in, articles)); removebuilder.and(removeobject); /*打印结果*/ coll.remove(removebuilder.get()); dbobject articlecountquery = null; for(object o: clusters) { articlecountquery = new basicdbobject(clusterid, o); curs = coll.find(articlecountquery); if(curs.count() != 0) { clusters.remove(o); } } removeobject = new basicdbobject(clusterid, new basicdbobject($in, clusters)); removebuilder.and(removeobject); coll.remove(removebuilder.get()); /** curs = coll.find(removebuilder.get()); articles = new arraylist(); clusters = new hashset(); article = null; while(curs.hasnext()) { article = curs.next(); articles.add(article.get(_id)); clusters.add(article.get(clusterid)); } /**/ system.out.println(articles); system.out.println(clusters); }}
定时操作,参考这篇博文,利用java代码编程实现(利用开源库quartz)。
linux的环境可以使用crontab工具,更为简单方便。此处所需要配合使用的js代码简略。