初识mongodb

1、下载zip包解压,进入命令行

2、show dbs  查看相关数据库,

3、db.createCollection("maketubu", {capped:true, size:100000,autoIndexId:true,max:2000})  创建集合

capped:(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档

size:集合的最大容量,单位为字节

autoIndexId:是否为ObjectId自动创建索引,默认为false

max:集合所能包括的最大的文档的数量。插入数据。优先检查size,再检查max的值

4、db.collectionname.drop()  删除集合    删除成功则返回true

5、向集合中插入数据  db.collentionname.insert(document(bson格式的数据))

也可以一次性插入多个数据db.collentionname.insertMany([document1,document2])

6、更新数据   

db.collection.update(
   <query>,     查询条件,类似于sql中的where子句
   <update>,    更新字段,类似于sql中的set子句
   {
     upsert: <boolean>,    如果没有匹配到数据 fasle 不做处理,true 插入该数据 默认false
     multi: <boolean>,     对于匹配到的数据,false只更新查询到的第一条,true 更新所有  默认false
     writeConcern: <document>    抛出异常的级别
   }
)

db.make.update({'title':'我是马克'},{$set:{'title':'我是大帅哥'}})    update({key:value},$set:{{key:value}})

7、删除文档    db.collection.remove({key:value})    只想删除一条数据   db.collection.remove({key:value},1)     删除所有数据

db.collection.remove()     类似于truncate

8、查询数据

 db.make.find({'title':'我是大帅哥'}).pretty()    后面加上pretty()会对查询结果进行格式化,看起来好看一点
{
        "_id" : ObjectId("5bcdcdf6ae1b65752c8bf450"),
        "title" : "我是大帅哥",
        "description" : "MongoDB 是我学习的第三个数据库",
        "by" : "马克图布",
        "url" : "http://www.maketubu.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}
{
        "_id" : ObjectId("5bcdcefaae1b65752c8bf451"),
        "title" : "我是大帅哥",
        "description" : "MongoDB 是我学习的第三个数据库",
        "by" : "马克图布",
        "url" : "http://www.maketubu.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 998
}

9、gt => >     lt => <       gte => >=     lte => <=     ne => !=      大于小于    大于等于  小于等于    不等于

db.col.find({key1:value1, key2:value2}).pretty()   and 条件查询
db.col.find({$or:[{"key":"value"},{"key": "value"}]}).pretty()   or条件查询
db.col.find({"key": {$gt:int_value}, $or: [{"key": "value"},{"key": "value"}]}).pretty()   and 和 or 联合查询

 

10、对返回字段做控制   

db.make.find({'likes':{$gt:110},$or:[{'by':'马克图布'},{'by':'马克图布'}]}).pretty()     原查询    and和or的联合查询
{
        "_id" : ObjectId("5bcdcefaae1b65752c8bf451"),
        "title" : "我是大帅哥",
        "description" : "MongoDB 是我学习的第三个数据库",
        "by" : "马克图布",
        "url" : "http://www.maketubu.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 998
}

db.make.find({'likes':{$gt:110},$or:[{'by':'马克图布'},{'by':'马克图布'}]},{title:1,by:1}).pretty()      都为1  则返回选择的字段
{
        "_id" : ObjectId("5bcdcefaae1b65752c8bf451"),
        "title" : "我是大帅哥",
        "by" : "马克图布"
}

db.make.find({'likes':{$gt:110},$or:[{'by':'马克图布'},{'by':'马克图布'}]},{title:0,by:0}).pretty()     都为0, 则返回未选择的字段
{
        "_id" : ObjectId("5bcdcefaae1b65752c8bf451"),
        "description" : "MongoDB 是我学习的第三个数据库",
        "url" : "http://www.maketubu.com",                   '}]},{title
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 998
}

11、操作运算符

db.make.find({likes:{$lt:200,$gt:100}}).pretty()      大于100 and  小于200

db.col.find({title:/教/})    查询title中包含 ‘教’的document
db.col.find({title:/^教/})    查询title中以 ‘教’ 开头的document
db.col.find({title:/教$/})    查询title中以 ‘教’的结尾document

12、mongodb    的数据类型

类型数字备注
Double1 
String2 
Object3 
Array4 
Binary data5 
Undefined6已废弃。
Object id7 
Boolean8 
Date9 
Null10 
Regular Expression11 
JavaScript13 
Symbol14 
JavaScript (with scope)15 
32-bit integer16 
Timestamp17 
64-bit integer18 
Min key255Query with -1.
Max key127 

根据字段类型来查询数据

db.make.find({title:{$type:1}})          title类型为double的document

db.make.find({title:{$type:2}})          title类型为string的document

13、limit    skip的使用

db.make.find({},{'title':1,_id:0}).skip(3)         跳过前三个结果

db.make.find({},{'title':1,_id:0}).limit(3)         选择前三个结果

14、查询结果的排序

db.make.find({}).sort({likes:-1})    查询make集合下的所有document,按照likes进行排序,-1为降序,1为升序

当这三个一起使用时的默认执行条件为       sort() -> skip() -> limit()

15、创建某个,或多个字段的索引

db.make.createIndex({title:1},{option:true,false}),前面为建索引的字段,后面为可选参数列表

ParameterTypeDescription
backgroundBoolean建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false
uniqueBoolean建立的索引是否唯一。指定为true创建唯一索引。默认值为false.
namestring索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
sparseBoolean对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.
expireAfterSecondsinteger指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
vindex version索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。
weightsdocument索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。
default_languagestring对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语
language_overridestring对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.

16、mongodb的聚合函数    

db.make.aggregate([{$group:{_id:'$by_user',num:{$sum:1}}}])      对集合make进行聚合,

[{$group:{_id:'$key',num:{$sum:1}}}]     $group  聚合     _id:'$key'   key聚合的字段,  num:{$sum:1}    对聚合字段的结果求和

表达式描述实例
$sum计算总和。db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg计算平均值db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min获取集合中所有文档对应值得最小值。db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max获取集合中所有文档对应值得最大值。db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push在结果文档中插入值到一个数组中。db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet在结果文档中插入值到一个数组中,但不创建副本。db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first根据资源文档的排序获取第一个文档数据。db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last根据资源文档的排序获取最后一个文档数据db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])

17、管道的操作,在聚合的结果管道中,对结果进行相关处理,在进行结果返回

  • $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
  • $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
  • $limit:用来限制MongoDB聚合管道返回的文档数。
  • $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
  • $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
  • $group:将集合中的文档分组,可用于统计结果。
  • $sort:将输入文档排序后输出。
  • $geoNear:输出接近某一地理位置的有序文档。

示例:

db.make.aggregate(          对聚合管道做一个结构的改变,选择输出的字段   $project
   { $project : {
       _id : 0 ,
       title : 1 ,
       author : 1
   }})

db.make.aggregate([       匹配分数大于   70   小于等于 90的数据,然后分组输出
                        {$match:{score:{ $gt:70,$lte:90}}},
                        {$group:{_id:null,count:{$sum:1}}
                       ])
db.make.aggregate(        跳过前5个结果
    { $skip : 5 });

18、java-mongodb     示例代码

import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import org.bson.BsonDocument;
import org.bson.Document;
import org.bson.codecs.configuration.CodecRegistry;
import org.bson.conversions.Bson;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Filter;

public class mongodbApp01 {
    public static void main( String args[] ){
        try{
            // 连接到 mongodb 服务
            MongoClient mongoClient = new MongoClient( "localhost" , 27017 );

            // 连接到数据库
            MongoDatabase mongoDatabase = mongoClient.getDatabase("make");
            System.out.println("Connect to database successfully");

//            mongoDatabase.createCollection("pangu");
//            System.out.println("集合创建成功");

            MongoCollection<Document> coll = mongoDatabase.getCollection("pangu");

            Document document = new Document("title", "MongoDB").
                    append("description", "database").
                    append("likes", 999).
                    append("by", "Fly");
            List<Document> documents = new ArrayList<Document>();
            documents.add(document);

            coll.deleteMany(Filters.eq("likes",777));
            coll.insertMany(documents);
            System.out.println("文档插入成功");
            //返回一个迭代器   数据查询
            FindIterable<Document> findIterable = coll.find();
            MongoCursor<Document> mongoCursor = findIterable.iterator();

            while(mongoCursor.hasNext()){
                System.out.println(mongoCursor.next().entrySet());
            }

            //数据更新
            coll.updateMany(Filters.eq("likes", 999), new Document("$set",new Document("likes",777)));
            FindIterable<Document> findIterable2 = coll.find();
            MongoCursor<Document> mongoCursor2 = findIterable2.iterator();

            System.out.println("数据更新成功");
            while(mongoCursor2.hasNext()){
                System.out.println(mongoCursor2.next());
            }


        }catch(Exception e){
            System.err.println( e.getClass().getName() + ": " + e.getMessage() );
        }
    }
    public void user_login_mongodb(){
        try {
            //连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址
            //ServerAddress()两个参数分别为 服务器地址 和 端口
            ServerAddress serverAddress = new ServerAddress("localhost",27017);
            List<ServerAddress> addrs = new ArrayList<ServerAddress>();
            addrs.add(serverAddress);

            //MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
            MongoCredential credential = MongoCredential.createScramSha1Credential("username", "make", "password".toCharArray());
            List<MongoCredential> credentials = new ArrayList<MongoCredential>();
            credentials.add(credential);

            //通过连接认证获取MongoDB连接
            MongoClient mongoClient = new MongoClient(addrs,credentials);

            //连接到数据库
            MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName");
            System.out.println("Connect to database successfully");
        } catch (Exception e) {
            System.err.println( e.getClass().getName() + ": " + e.getMessage() );
        }
    }
}




 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值