MongoDB基础语句

117 阅读1分钟

MongoDB基础语句(Navicat)

// insert语句
db.sms_sensitive_words.insert({
	createdBy: "MEAN",
	createdAt: ISODate("2022-12-19 16:45:06"),
	keyword: "长毛怪怪",
	status: "ENABLE"
})

// select语句(ALL、and、or)
db.sms_sensitive_words.count();
db.sms_sensitive_words.find({}).explain("executionStats");  // 查询执行统计信息
db.sms_sensitive_words.find().pretty();	// 格式化查询
db.sms_sensitive_words.find({createdBy: "MEAN", status: "ENABLE"})
db.sms_sensitive_words.find({$and:[{createdBy: "MEAN"}, {status: "ENABLE"}]})
db.sms_sensitive_words.find({$or:[{createdBy: "MEAN"}, {status: "ENABLE"}]})

// update语句(首参为条件,后参为更新参数)
db.sms_sensitive_words.update({createdBy: "MEAN"}, {$set: {keyword: "长毛怪挂", createdBy: "test"}})
db.sms_sensitive_words.update({createdBy: "test"}, {$set: {keyword: "长毛怪挂"}}, {$unset: {status: 1}})
db.sms_sensitive_words.update({createdBy: "test"}, {$set: {keyword: { minganci: ["长毛怪挂","拉喀什","疆独"], bumingan: ["习大大","砥砺前行","大爱无疆"]}}})

// delete语句
db.sms_sensitive_words.remove({keyword: "舔狗"})

// 创建索引
db.sms_sensitive_words.createIndex({num: 1});
db.sms_sensitive_words.getIndexes();

// 帮助
db.help()
// 状态
db.sms_sensitive_words.stats()
// 命令方式查看状态
db.runCommand({dbstats: 1})

// 循环
for (var i = 0; i < 20; i++) {
  printjson(i);
	// db.sms_sensitive_words.save({num: i})
}

// 输出所有数据库
show dbs;

// 输出所有集合
show collections;

// MongoDB中条件操作符有:
(>) 大于 - $gt
(<) 小于 - $lt
(>=) 大于等于 - $gte
(<= ) 小于等于 - $lte

db.sms_sensitive_words.find({likes : {$gt : 100}})
类似于SQL语句:
Select * from sms_sensitive_words where likes > 100;

// MongoDB 操作符 - $type 实例
db.sms_sensitive_words.find({"title" : {$type : 2}})
或
db.sms_sensitive_words.find({"title" : {$type : 'string'}})

// 分页: limit()方法基本语法如下所示:
>db.COLLECTION_NAME.find().limit(NUMBER)
db.sms_sensitive_words.find({},{"title":1,_id:0}).limit(2)

// 跳过:Skip() 方法 跳过指定数量的数据
>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
db.sms_sensitive_words.find({},{"title":1,_id:0}).limit(1).skip(1)

// 排序:sort()方法基本语法如下所示:
>db.COLLECTION_NAME.find().sort({KEY:1})
db.sms_sensitive_words.find({},{"title":1,_id:0}).sort({"likes":-1})

// 索引:createIndex()方法基本语法格式如下所示:(1:升序; -1降序;)
>db.collection.createIndex(keys, options)
db.col.createIndex({"title":1,"description":-1})

// 聚合:aggregate() 方法的基本语法格式如下所示:
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
以上实例类似sql语句:GROUP BY
 select by_user, count(*) from mycol group by by_user;
 
表达式描述实例
$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"}}}]) 

1$project实例
db.article.aggregate(
    { $project : {
        title : 1 ,
        author : 1 ,
    }}
 );这样的话结果中就只还有_id,tilte和author三个字段了,默认情况下_id字段是被包含的,如果要想不包含_id话可以这样:
db.article.aggregate(
    { $project : {
        _id : 0 ,
        title : 1 ,
        author : 1
    }});

2.$match实例
db.articles.aggregate( [
                        { $match : { score : { $gt : 70, $lte : 90 } } },
                        { $group: { _id: null, count: { $sum: 1 } } }
                       ] );$match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。

3.$skip实例
db.article.aggregate(
    { $skip : 5 });
经过$skip管道操作符处理后,前五个文档被"过滤"掉。

  • Java链接MongoDB

// 连接数据库,你需要指定数据库名称,如果指定的数据库不存在,mongo会自动创建数据库。

import com.mongodb.client.MongoDatabase;

public class MongoDBJDBC{
   public static void main( String args[] ){
      try{   
       // 连接到 mongodb 服务
         MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
         // 连接到数据库
         MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  
       System.out.println("Connect to database successfully");
        
      }catch(Exception e){
        System.err.println( e.getClass().getName() + ": " + e.getMessage() );
     }
   }
}

// 本实例中 Mongo 数据库无需用户名密码验证。如果你的 Mongo 需要验证用户名及密码,可以使用以下代码:

import java.util.ArrayList;  
import java.util.List;  
import com.mongodb.MongoClient;  
import com.mongodb.MongoCredential;  
import com.mongodb.ServerAddress;  
import com.mongodb.client.MongoDatabase;  
  
public class MongoDBJDBC {  
    public static void main(String[] args){  
        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", "databaseName", "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");  
            
            // 1 创建集合
            mongoDatabase.createCollection("test");
            System.out.println("集合创建成功");
            
            MongoCollection<Document> collection = mongoDatabase.getCollection("test");
            System.out.println("集合 test 选择成功");
            
            // 2 插入文档
            /** 
            * 1. 创建文档 org.bson.Document 参数为key-value的格式 
            * 2. 创建文档集合List<Document> 
            * 3. 将文档集合插入数据库集合中 mongoCollection.insertMany(List<Document>) 插入单个文档可以用 mongoCollection.insertOne(Document) 
            * */
            Document document = new Document("title", "MongoDB").  
            append("description", "database").  
            append("likes", 100).  
            append("by", "Fly");  
            List<Document> documents = new ArrayList<Document>();  
            documents.add(document);  
            collection.insertMany(documents);  
            System.out.println("文档插入成功");  
            
            // 3 检索所有文档  
            /** 
            * 1. 获取迭代器FindIterable<Document> 
            * 2. 获取游标MongoCursor<Document> 
            * 3. 通过游标遍历检索出的文档集合 
            * */  
            FindIterable<Document> findIterable = collection.find();  
            MongoCursor<Document> mongoCursor = findIterable.iterator();  
            while(mongoCursor.hasNext()){  
                System.out.println(mongoCursor.next());  
            }  
            
            // 4 更新文档   
            // 将文档中likes=100的文档修改为likes=200   
            collection.updateMany(Filters.eq("likes", 100), new Document("$set",new Document("likes",200)));  
            //检索查看结果  
            FindIterable<Document> findIterable = collection.find();  
            MongoCursor<Document> mongoCursor = findIterable.iterator();  
            while(mongoCursor.hasNext()){  
                System.out.println(mongoCursor.next());  
            }  
            
            // 5 删除文档
            //删除符合条件的第一个文档  
            collection.deleteOne(Filters.eq("likes", 200));  
            //删除所有符合条件的文档  
            collection.deleteMany (Filters.eq("likes", 200));  
            //检索查看结果  
            FindIterable<Document> findIterable = collection.find();  
            MongoCursor<Document> mongoCursor = findIterable.iterator();  
            while(mongoCursor.hasNext()){  
                System.out.println(mongoCursor.next());  
            }
            
        } catch (Exception e) {  
            System.err.println( e.getClass().getName() + ": " + e.getMessage() );  
        }  
    }  
}