如何通过shell脚本操作mongodb 脚本

MongoDB数据读写的几种方法
1、MongoDB Shell Script
mongoDB的命令行使用的是类似JavaScript脚本的命令行交互,所以我们可以在shell当中使用JS的一些命令、函数等。
输入mongo命令启动mongo控制台
然后参考官方文档操作mongo数据。
常用命令有
use db-name
show collections
db.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 & 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.UnknownHostE
import java.util.ArrayL
import java.util.HashS
import com.mongodb.BasicDBO
import com.mongodb.DB;
import com.mongodb.DBC
import com.mongodb.DBC
import com.mongodb.DBO
import com.mongodb.M
import com.mongodb.QueryB
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) {
m = new Mongo( &10.211.55.7& , 27017 );
} catch (UnknownHostException e) {
e.printStackTrace();
System.exit(0);
DB db = m.getDB(&clusterDb&);
List&String& 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&Object& articles = new ArrayList&Object&(); //此处element类型均为Object
HashSet&Object& clusters = new HashSet&Object&();
DBObject article =
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 =
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&Object&();
clusters = new HashSet&Object&();
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)。
的环境可以使用crontab工具,更为简单方便。此处所需要配合使用的JS代码简略。
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。怎样在linux的shell脚本中连接mongodb插入_百度知道
怎样在linux的shell脚本中连接mongodb插入
我有更好的答案
按默认排序
test --shell注意。mongodb常用命令;查看集合命令:&#39,test/删除:8888&#47.remove();:db:查看数据库命令;test'&#47.find()插入数据.1;$sql&mongo 127,望采纳;切换数据库:|&#47,如若还有问题,请点击【追问】希望我的回答对您有所帮助:show collections.3&#47.2.1.test.0.3&#47:1}).集合名,--shell表示通过shell交互如若满意:use databaseNhome&#47.0,斜线后是数据库名称.insert({name,test'mongodb-2:&mongodb-2:mongo 127:'通过shell脚本实现一个日志分析并入库的操作;home&#47.insert({name:端口号;&#47:1});mongodb&#47,没有设置用户名密码.0;mongodb/查询数据,请点击右侧【采纳答案】您好:sql=&quot.集合名;;bin&#47.2;bin&#47。连结后会有一个默认连接的数据库.0:&#47。所以直接通过该命令就可以连接。连接mongodb的命令如下;定义执行的sqlecho &quot,echo命令中的格式必须这样写,管线命令后面的是是数据库安装地址 然后是ip,很高兴为您解答:8888这个是我的数据库配置.test。要在连接数据的机器上安装mongodb的客户端;test&#47
其他类似问题
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 mongodb 数组操作 的文章

 

随机推荐