MongoDB增删改查(命令行、java api)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/whxaing2011/article/details/18841585

环境:win7

mongo-java-driver:mongo-java-driver-2.11.2.jar

一、Mongo Shell

     1、MongoDB连接

          MongoDB提供一个完整的JS环境,通过mongo shell命令来操作MongoDB数据库。

             本地:>mongo (默认连接本地数据库,端口:27017)

             其他机器:>mongo --port port --host ip(或者:mongo host : port)

             连接成功后,默认连接的是test数据库,

             输入db可以查看当前使用的是哪个数据库

      

      2、查看数据库信息 

           >show dbs(或者:show databases(Version 2.4支持)) //列出所有的数据库

           >use databaseName  //选择要操作的数据库

           通过help命令可以查询帮助信息。

      3、C(create)R(read)U(update)D(delete)

           (1)C(create):创建一个集合(Collection,类似于RDBMS中的数据表),并插入一条记录

           > m = {name:"hello mongo"}

           > db.mongodb_shell.insert(m);//向名为mongodb_shell的集合中插入一条记录,如果该集合在当前数据库中不存在,那么将自动创建该名称的集合。

           >db.mongodb_shell.insert({"name":"hello mongo","desc":"mongodb crud","status":["mongo","crud"]});

           > db.mongodb_shell.insert({"name":"hello mongo","desc":"mongodb crud","status":{"name":"mongo","tag":"crud"}});

           查看集合是否存在,可以通过>show collections;(或者show tables;)命令查看,执行查询命令后,可以看到有一个system.indexes集合,这是每个MongoDB数据库都会有的。

          除了使用shell命令外,还可以通过javascript函数来插入记录:

function insertDocument(dbname,collname) {
   var dbcoll = db.getSiblingDB(dbname).getCollection(collname);
   dbcoll.insert({"name":"hello mongo"});
   printjson(dbcoll.count());
 }
//调用方法
insertDocument("mongodb_test","mongodb_shell");

          db.collection.insert()和db.collection.save();的区别:

          1)insert()保存记录时,要插入的文档的_id值必须在集合中是独一无二的(如果使用MongoDB默认的_id是不会出现重复的,但是,如果使用自定的_id就需要考虑_id值重复的问题了),否则就会出现com.mongodb.MongoException$DuplicateKey错误         

          2)save()保存记录时,如果集合中存在和要插入的文档相同的_id值的文档记录,那么就会执行更新操作,如果不存在,就执行插入操作。

           (2)R(read):查询集合中的记录

           >db.mongodb_shell.findOne();//查询一条记录

           >db.mongodb_shell.find();//查询所有,默认显示前20条记录,如果记录总数超过20条,可以通过>it来查询更多的记录。

           >db.mongodb_shell.find({"name":"hello mongo"});//根据条件查询指定的文档记录

           >db.mongodb_shell.find().limit(10);//只查询10条记录

           例如:

> db.mongodb_shell.findOne();
{ "_id" : ObjectId("52e74f7a95009070292b68af"), "name" : "hello mongo" }
> db.mongodb_shell.find();
{ "_id" : ObjectId("52e74f7a95009070292b68af"), "name" : "hello mongo" }
{ "_id" : ObjectId("52e74fb27b5ffeda466a9e55"), "name" : "hello mongo" }

               循环插入数据:

for(var i=1;i<25;i++) {
     db.mongodb_shell.insert({"i":i})
};

               var cursor =  db.mongodb_shell.find();//返回一个游标,

               printjson(cursor[1]);//打印出索引为1的文档。//下标从0开始

                在返回的记录中,我们可以看到有一个"_id"值,我们之前的操作中并没有插入过_id,那么它是怎么生成的呢?关于这个特殊的值,此文中不作论述,

可以参考:

               1、官方文档:docs.mongodb.org/manual/reference/object-id/

               2、http://www.blogjava.net/dongbule/archive/2011/06/12/352138.html

               这里只是介绍了一些简单的查询,稍后还会专门写一篇关于MongoDB查询的博文。

          (3)U(update)

              更新操作语法:            update操作默认更新单文档,如果想更新多个文档,那么可以将multi设置为true。

version2.2之前:db.collection.update( <query>, <update>, <upsert>, <multi> )

version2.2开始:
db.collection.update(
   <query>,
   <update>,
   { upsert: <boolean>, multi: <boolean> }
)

            操作示例:

> db.mongodb_shell.insert({"name":"hello mongo","desc":"mongodb crud","status":{"name":"mongo","tag":"crud"}});
> db.mongodb_shell.findOne();
{
        "_id" : ObjectId("52e75cfd7b5ffeda466a9ec2"),
        "name" : "hello mongo",
        "desc" : "mongodb crud",
        "status" : {
                "name" : "mongo",
                "tag" : "crud"
        }
}
> db.mongodb_shell.update(
  {
        "name" : "hello mongo",
        "desc" : "mongodb crud",
        "status" : {
                "name" : "mongo",
                "tag" : "crud"
        }
   },
   {
        "name" : "hello mongo",
        "desc" : "mongodb crud",
        "status" : {
                "name" : "new mongo",
                "tag" : "new crud"
        }
},{upsert:true});

//更新后
> db.mongodb_shell.findOne();
{
        "_id" : ObjectId("52e76b8f7b5ffeda466a9ed2"),
        "name" : "hello mongo",
        "desc" : "mongodb crud",
        "status" : {
                "name" : "new mongo",
                "tag" : "new crud"
        }
}
           (4)D(delete)
             db.mongodb_shell.remove();//删除所有
             db.mongodb_shell.remove({"name":"hello mongo"});//删除满足条件的记录
             db.mongodb_shell.remove({"name":"hello mongo"},1);或者db.mongodb_shell.remove({"name":"hello mongo"},true);//删除满足条件的单条记录

二、Java API
      1、MongoDB连接
       MongoClient mongo = new MongoClient();//不指定host和port,默认使用本地数据库,端口:27017
       MongoClient mongo = new MongoClient(host, port);

      2、查看数据库信息

      List<String> dbList = mongo.getDatabaseNames();//返回所有数据库名
      DB db = mongo.getDB(dbname);//获取指定名称的数据库对象

      Set<String> dbcollList = db.getCollectionNames();//返回数据库的集合信息
      DBCollection dbcoll = db.getCollection(collname);//获取指定名称的集合对象

       3、C(create)R(read)U(update)D(delete)
    DBObject dbo = new BasicDBObject();
    dbo.put("_id",1);
    dbo.put("name","mongo");
    dbo.put("desc", "hello mongo");

          (1)C(create)
     dbcoll .insert(dbo);
     dbcoll .save(dbo);//save()和insert()的区别已经在上文中做过介绍

          (2)R(read)
     DBCursor cursor = dbcoll.find();
     遍历:
     while(cursor.hasNext()) {
         DBObject dbo = cursor.next();
         System.out.println(dbo);
     }

     DBObject one = dbcoll.findOne();
     DBCursor cursor = dbcoll.find(new BasicDBObject("name","hello mongo"));
     DBObject one = dbcoll.findOne(new BasicDBObject("name","hello mongo"));

          (3)U(update)
        DBObject new_dbo = new BasicDBObject();
        new_dbo.put("name","mongo");
        new_dbo.put("desc", "hello mongo");

        DBObject query = new BasicDBObject();
        query.put("_id", 1);
        query.put("name", "mongo");

        dbcoll.update(query,new_dbo);//更新满足条件的单个文档
        dbcoll.updateMulti(query,new_dbo);//更新满足条件的多个文档

        注意:更新操作中,不会更新_id字段。

          (4)D(delete)
       WriteResult wr = dbcoll.remove(query);
       wr.getN();//返回操作的记录数

      db.dropDatabase();//删除数据库
      dbcoll.drop();//删除文档集合

猜你喜欢

转载自blog.csdn.net/whxaing2011/article/details/18841585
今日推荐