zoukankan      html  css  js  c++  java
  • MongoDB学习第七篇 --- sql和mongodb对比

    一、术语和概念的对比

    SQLMongoDB
    database database
       
    row document or BSON document
    column field
    index index
    table joins $lookup, embedded documents

    primary key

    Specify any unique column or column combination as primary key.

    primary key

    In MongoDB, the primary key is automatically set to the _id field.

    aggregation (e.g. group by)

    aggregation pipeline

    二、对库和表的操作语句对比

    SQLMongoDB
    CREATE TABLE people (
        id MEDIUMINT NOT NULL
            AUTO_INCREMENT,
        user_id Varchar(30),
        age Number,
        status char(1),
        PRIMARY KEY (id)
    )
    

     直接执行insert操作即可,如果表不存在,自动创建

    db.people.insertOne( {
        user_id: "abc123",
        age: 55,
        status: "A"
     } )
    

     也可以用一下语句创建collection

    db.createCollection("people")
    
    ALTER TABLE people
    ADD join_date DATETIME
    
    db.people.updateMany(
        { },
        { $set: { join_date: new Date() } }
    )
    
    ALTER TABLE people
    DROP COLUMN join_date
    
    db.people.updateMany(
        { },
        { $unset: { "join_date": "" } }
    )
    
    CREATE INDEX idx_user_id_asc
    ON people(user_id)
    
    db.people.createIndex( { user_id: 1 } )
    
    CREATE INDEX
           idx_user_id_asc_age_desc
    ON people(user_id, age DESC)
    
    db.people.createIndex( { user_id: 1, age: -1 } )
    
    DROP TABLE people
    
    db.people.drop()

    三、insert语句的对比

    SQL INSERT StatementsMongoDB insertOne() Statements
    INSERT INTO people(user_id,
                      age,
                      status)
    VALUES ("bcd001",
            45,
            "A")
    
    db.people.insertOne(
       { user_id: "bcd001", age: 45, status: "A" }
    )

    四、select语句的对比

    SQL SELECT StatementsMongoDB find() Statements
    SELECT *
    FROM people
    
    db.people.find()
    
    SELECT id,
           user_id,
           status
    FROM people
    
    db.people.find(
        { },
        { user_id: 1, status: 1 }
    )
    
    SELECT user_id, status
    FROM people
    
    db.people.find(
        { },
        { user_id: 1, status: 1, _id: 0 }
    )
    
    SELECT *
    FROM people
    WHERE status = "A"
    
    db.people.find(
        { status: "A" }
    )
    
    SELECT user_id, status
    FROM people
    WHERE status = "A"
    
    db.people.find(
        { status: "A" },
        { user_id: 1, status: 1, _id: 0 }
    )
    
    SELECT *
    FROM people
    WHERE status != "A"
    
    db.people.find(
        { status: { $ne: "A" } }
    )
    
    SELECT *
    FROM people
    WHERE status = "A"
    AND age = 50
    
    db.people.find(
        { status: "A",
          age: 50 }
    )
    
    SELECT *
    FROM people
    WHERE status = "A"
    OR age = 50
    
    db.people.find(
        { $or: [ { status: "A" } ,
                 { age: 50 } ] }
    )
    
    SELECT *
    FROM people
    WHERE age > 25
    
    db.people.find(
        { age: { $gt: 25 } }
    )
    
    SELECT *
    FROM people
    WHERE age < 25
    
    db.people.find(
       { age: { $lt: 25 } }
    )
    
    SELECT *
    FROM people
    WHERE age > 25
    AND   age <= 50
    
    db.people.find(
       { age: { $gt: 25, $lte: 50 } }
    )
    
    SELECT *
    FROM people
    WHERE user_id like "%bc%"
    
    db.people.find( { user_id: /bc/ } )
    

    -or-

    db.people.find( { user_id: { $regex: /bc/ } } )
    
    SELECT *
    FROM people
    WHERE user_id like "bc%"
    
    db.people.find( { user_id: /^bc/ } )
    

    -or-

    db.people.find( { user_id: { $regex: /^bc/ } } )
    
    SELECT *
    FROM people
    WHERE status = "A"
    ORDER BY user_id ASC
    
    db.people.find( { status: "A" } ).sort( { user_id: 1 } )
    
    SELECT *
    FROM people
    WHERE status = "A"
    ORDER BY user_id DESC
    
    db.people.find( { status: "A" } ).sort( { user_id: -1 } )
    
    SELECT COUNT(*)
    FROM people
    
    db.people.count()
    

    or

    db.people.find().count()
    
    SELECT COUNT(user_id)
    FROM people
    
    db.people.count( { user_id: { $exists: true } } )
    

    or

    db.people.find( { user_id: { $exists: true } } ).count()
    
    SELECT COUNT(*)
    FROM people
    WHERE age > 30
    
    db.people.count( { age: { $gt: 30 } } )
    

    or

    db.people.find( { age: { $gt: 30 } } ).count()
    
    SELECT DISTINCT(status)
    FROM people
    
    db.people.distinct( "status" )
    
    SELECT *
    FROM people
    LIMIT 1
    
    db.people.findOne()
    

    or

    db.people.find().limit(1)
    
    SELECT *
    FROM people
    LIMIT 5
    SKIP 10
    
    db.people.find().limit(5).skip(10)
    
    EXPLAIN SELECT *
    FROM people
    WHERE status = "A"
    
    db.people.find( { status: "A" } ).explain()

    五、update语句的对比

    SQL Update StatementsMongoDB updateMany() Statements
    UPDATE people
    SET status = "C"
    WHERE age > 25
    
    db.people.updateMany(
       { age: { $gt: 25 } },
       { $set: { status: "C" } }
    )
    
    UPDATE people
    SET age = age + 3
    WHERE status = "A"
    
    db.people.updateMany(
       { status: "A" } ,
       { $inc: { age: 3 } }
    )

     

    六、delete语句的对比

    SQL Delete StatementsMongoDB deleteMany() Statements
    DELETE FROM people
    WHERE status = "D"
    
    db.people.deleteMany( { status: "D" } )
    
    DELETE FROM people
    
    db.people.deleteMany({})
  • 相关阅读:
    Hibernate入门
    oracle数据库应用(2)
    oracle数据库应用
    Oracle数据库基础
    InitBinder 在Controller方法执行之前进行捕获请求,进行类型的转换
    Spring面试题
    Object处理方法的返回值
    使用jQuery快速高效制作网页交互特效
    struts2
    表分区
  • 原文地址:https://www.cnblogs.com/malcolmfeng/p/6937517.html
Copyright © 2011-2022 走看看