SQL vs MongoDB

Programfiler

Følgende tabell lister programfilene til MySQL/Oracle og de korresponderende programfilene til MongoDB .

MySQL/Oracle MongoDB
Database Server mysqld/oracle mongod
Database Klient mysql/sqlplus mongo

Terminologi og Konsepter

Tabellen nedenfor viser ulike SQL-begreper og -konsepter og motsvarende for MongoDB.

SQL Begreper/Konsepter MongoDB Begreper/Konsepter
database database
tabell collection
rad dokument eller BSON dokument
kolonne felt
indeks indeks
table joins Innebygde dokumenter og lenker
primary key
Velg en unik kolonne eller kolonne-kombinasjon som primærnøkkel.
primary key
I MongoDB blir primærnøkkelen automatisk satt til _id-feltet.
aggregering (f.eks. group by) aggregeringsrammeverk
Jfr. SQL to Aggregation Framework Mapping Chart.

Eksempler

Tabellen nedenfor viser ulike SQL-setninger og tilsvarende MongoDB-setninger. Eksemplene i tabellen bygger på følgende forutsetninger:

  • SQL-eksemplene forutsetter en tabell kalt:  users.
  • MongoDB-eksemplene forutsetter en collection kalt: users, som inneholder dokumenter basert på følgende lest:
    {
      _id: ObjectID("509a8fb2f3f4948bd2f983a0"),
      user_id: "abc123",
      age: 55,
      status: 'A'
    }

Create og Alter (Opprette og endre)

Følgende tabell presenterer ulike SQL-setninger med tilsvarende MongoDB-setninger relatert til handlinger på tabell-nivå.

SQL Skjema-setninger MongoDB Skjema-setninger Referanse
CREATE TABLE users (
    id MEDIUMINT NOT NULL
        AUTO_INCREMENT,
    user_id Varchar(30),
    age Number,
    status char(1),
    PRIMARY KEY (id)
)
En collection bli automatisk opprettet ved første insert- operasjon. Primærnøkkelen _id blir lagt til automatisk hvis _id -feltet ikke er spesifisert.

db.users.insert( {
    user_id: "abc123",
    age: 55,
    status: "A"
 } )

Men man kan også eksplisitt opprette en collection:

db.createCollection("users")
Se insert() og createCollection() for mer informasjon.
ALTER TABLE users
ADD join_date DATETIME
Collections verken beskriver eller bestemmer strukturen  til de tilhørende dokumentene. Se Schema Design wiki for mer informasjon. Se update() og $set for mer informasjon om å endre struktur på dokumenter i en collection.
ALTER TABLE users
DROP COLUMN join_date
Collections verken beskriver eller bestemmer strukturen  til de tilhørende dokumentene. Se Schema Design wiki for mer informasjon. Se update() og $set for mer informasjon om å endre struktur på dokumenter i en collection.
CREATE INDEX idx_user_id_asc
ON users(user_id)
db.users.ensureIndex( { user_id: 1 } )
Se ensureIndex() og indexes for mer informasjon.
CREATE INDEX
       idx_user_id_asc_age_desc
ON users(user_id, age DESC)
db.users.ensureIndex( { user_id: 1, age: -1 } )
Se ensureIndex() og indexes for mer informasjon.
DROP TABLE users
db.users.drop()
Se drop() for mer informasjon.

Insert

Følgende tabell viser ulike SQL-setninger relatert til å sette inn rader i tabeller, med tilsvarende MongoDB-setninger.

SQL INSERT MongoDB insert() Referanser
INSERT INTO users(user_id,
                  age,
                  status)
VALUES ("bcd001",
        45,
        "A")
db.users.insert( {
       user_id: "bcd001",
       age: 45,
       status: "A"
} )
Se insert() for mer informasjon.

Select

Følgende tabell visert ulike SQL-setninger relatert til å lese tabellrader, med tilsavrende MongoDB-setninger.

SQL SELECT MongoDB find() Referanse
SELECT *
FROM users
db.users.find()
Se find() for mer informasjon.
SELECT id, user_id, status
FROM users
db.users.find(
    { },
    { user_id: 1, status: 1 }
)
Se find() for mer informasjon.
SELECT user_id, status
FROM users
db.users.find(
    { },
    { user_id: 1, status: 1, _id: 0 }
)
Se find() for mer informasjon.
SELECT *
FROM users
WHERE status = "A"
db.users.find(
    { status: "A" }
)
Se find() for mer informasjon.
SELECT user_id, status
FROM users
WHERE status = "A"
db.users.find(
    { status: "A" },
    { user_id: 1, status: 1, _id: 0 }
)
Se find() for mer informasjon.
SELECT *
FROM users
WHERE status != "A"
db.users.find(
    { status: { $ne: "A" } }
)
Se find() og $ne for mer informasjon.
SELECT *
FROM users
WHERE status = "A"
AND age = 50
db.users.find(
    { status: "A",
      age: 50 }
)
Se find() og $and for mer informasjon.
SELECT *
FROM users
WHERE status = "A"
OR age = 50
db.users.find(
    { $or: [ { status: "A" } ,
             { age: 50 } ] }
)
Se find() og $or for mer informasjon.
SELECT *
FROM users
WHERE age > 25
db.users.find(
    { age: { $gt: 25 } }
)
Se find() og $gt for mer informasjon.
SELECT *
FROM users
WHERE age < 25
db.users.find(
   { age: { $lt: 25 } }
)
Se find() og $lt for mer informasjon.
SELECT *
FROM users
WHERE age > 25
AND   age <= 50
db.users.find(
   { age: { $gt: 25, $lte: 50 } }
)
Se find()$gt, og $lte for mer informasjon.
SELECT *
FROM users
WHERE user_id like "%bc%"
db.users.find(
   { user_id: /bc/ }
)
Se find() og $regex for mer informasjon.
SELECT *
FROM users
WHERE user_id like "bc%"
db.users.find(
   { user_id: /^bc/ }
)
Se find() og $regex for mer informasjon.
SELECT *
FROM users
WHERE status = "A"
ORDER BY user_id ASC
db.users.find( { status: "A" } ).sort( { user_id: 1 } )
Se find() og sort() for mer informasjon.
SELECT *
FROM users
WHERE status = "A"
ORDER BY user_id DESC
db.users.find( { status: "A" } ).sort( { user_id: -1 } )
Se find() og sort() for mer informasjon.
SELECT COUNT(*)
FROM users
db.users.count()

or

db.users.find().count()
Se find() og count() for mer informasjon.
SELECT COUNT(user_id)
FROM users
db.users.count( { user_id: { $exists: true } } )

or

db.users.find( { user_id: { $exists: true } } ).count()
Se find()count(), og $exists for mer informasjon.
SELECT COUNT(*)
FROM users
WHERE age > 30
db.users.count( { age: { $gt: 30 } } )

or

db.users.find( { age: { $gt: 30 } } ).count()
Se find()count(), og $gt for mer informasjon.
SELECT DISTINCT(status)
FROM users
db.users.distinct( "status" )
Se find() og distinct() for mer informasjon.
SELECT *
FROM users
LIMIT 1
db.users.findOne()

or

db.users.find().limit(1)
Se find()findOne(), og limit() for mer informasjon.
SELECT *
FROM users
LIMIT 5
SKIP 10
db.users.find().limit(5).skip(10)
Se find()limit(), og skip() for mer informasjon.
EXPLAIN SELECT *
FROM users
WHERE status = "A"
db.users.find( { status: "A" } ).explain()
Se find() og explain() for mer informasjon.

Update

Følgende tabell viser ulike SQL-setninger relatert til å oppdatere eksisterende tabellrader, med tilsvarende MongoDB-setninger.

SQL Update MongoDB update() Referanse
UPDATE users
SET status = "C"
WHERE age > 25
db.users.update(
   { age: { $gt: 25 } },
   { $set: { status: "C" } },
   { multi: true }
)
Se update()$gt, og $set for mer informasjon.
UPDATE users
SET age = age + 3
WHERE status = "A"
db.users.update(
   { status: "A" } ,
   { $inc: { age: 3 } },
   { multi: true }
)
Se update()$inc, og $set for mer informasjon.

Slette Rader

Følgende tabell viser ulike SQL-setninger relateer til å slette tabellrader, med tilsvarende MongoDB-setninger.

SQL Delete MongoDB remove() Referanse
DELETE FROM users
WHERE status = "D"
db.users.remove( { status: "D" } )
Se remove() for mer informasjon.
DELETE FROM users
db.users.remove( )
Se remove() for mer informasjon.

Skriv en kommentar