MongoDB
Fråga efter data (Komma igång)
Sök…
Introduktion
Grundläggande frågaexempel
Hitta()
hämta alla dokument i en samling
db.collection.find({});
hämta dokument i en samling med ett villkor (liknande WHERE i MYSQL)
db.collection.find({key: value});
example
db.users.find({email:"[email protected]"});
hämta dokument i en samling med hjälp av booleska förhållanden (Query Operators)
//AND
db.collection.find( {
$and: [
{ key: value }, { key: value }
]
})
//OR
db.collection.find( {
$or: [
{ key: value }, { key: value }
]
})
//NOT
db.inventory.find( { key: { $not: value } } )
fler booleska operationer och exempel kan hittas här
OBS: Sök () fortsätter att söka i samlingen även om en dokumentmatch har hittats, därför är den ineffektiv när den används i en stor samling, men genom att noggrant modellera dina data och / eller använda index kan du öka effektiviteten för att hitta ( )
Hitta en()
db.collection.findOne({});
frågefunktionen liknar Sök () men detta kommer att avsluta exekveringen i det ögonblick det hittar ett dokument som matchar dess tillstånd, om det används med och tomt objekt kommer det att hämta det första dokumentet och returnera det. findOne () mongodb api-dokumentation
Förfrågningsdokument - Använda AND-, OR- och IN-villkor
Alla dokument från students
samling.
> db.students.find().pretty();
{
"_id" : ObjectId("58f29a694117d1b7af126dca"),
"studentNo" : 1,
"firstName" : "Prosen",
"lastName" : "Ghosh",
"age" : 25
}
{
"_id" : ObjectId("58f29a694117d1b7af126dcb"),
"studentNo" : 2,
"firstName" : "Rajib",
"lastName" : "Ghosh",
"age" : 25
}
{
"_id" : ObjectId("58f29a694117d1b7af126dcc"),
"studentNo" : 3,
"firstName" : "Rizve",
"lastName" : "Amin",
"age" : 23
}
{
"_id" : ObjectId("58f29a694117d1b7af126dcd"),
"studentNo" : 4,
"firstName" : "Jabed",
"lastName" : "Bangali",
"age" : 25
}
{
"_id" : ObjectId("58f29a694117d1b7af126dce"),
"studentNo" : 5,
"firstName" : "Gm",
"lastName" : "Anik",
"age" : 23
}
Liknande
mySql
med kommandot ovan.SELECT * FROM students;
db.students.find({firstName:"Prosen"});
{ "_id" : ObjectId("58f2547804951ad51ad206f5"), "studentNo" : "1", "firstName" : "Prosen", "lastName" : "Ghosh", "age" : "23" }
Liknande
mySql
med kommandot ovan.SELECT * FROM students WHERE firstName = "Prosen";
OCH Frågor
db.students.find({
"firstName": "Prosen",
"age": {
"$gte": 23
}
});
{ "_id" : ObjectId("58f29a694117d1b7af126dca"), "studentNo" : 1, "firstName" : "Prosen", "lastName" : "Ghosh", "age" : 25 }
Liknande
mySql
med kommandot ovan.SELECT * FROM students WHERE firstName = "Prosen" AND age >= 23
Eller frågor
db.students.find({
"$or": [{
"firstName": "Prosen"
}, {
"age": {
"$gte": 23
}
}]
});
{ "_id" : ObjectId("58f29a694117d1b7af126dca"), "studentNo" : 1, "firstName" : "Prosen", "lastName" : "Ghosh", "age" : 25 }
{ "_id" : ObjectId("58f29a694117d1b7af126dcb"), "studentNo" : 2, "firstName" : "Rajib", "lastName" : "Ghosh", "age" : 25 }
{ "_id" : ObjectId("58f29a694117d1b7af126dcc"), "studentNo" : 3, "firstName" : "Rizve", "lastName" : "Amin", "age" : 23 }
{ "_id" : ObjectId("58f29a694117d1b7af126dcd"), "studentNo" : 4, "firstName" : "Jabed", "lastName" : "Bangali", "age" : 25 }
{ "_id" : ObjectId("58f29a694117d1b7af126dce"), "studentNo" : 5, "firstName" : "Gm", "lastName" : "Anik", "age" : 23 }
Liknande
mySql
med kommandot ovan.SELECT * FROM students WHERE firstName = "Prosen" OR age >= 23
Och ELLER Frågor
db.students.find({
firstName : "Prosen",
$or : [
{age : 23},
{age : 25}
]
});
{ "_id" : ObjectId("58f29a694117d1b7af126dca"), "studentNo" : 1, "firstName" : "Prosen", "lastName" : "Ghosh", "age" : 25 }
Liknande mySql-fråga med kommandot ovan.
SELECT * FROM students WHERE firstName = "Prosen" AND age = 23 OR age = 25;
IN-frågor Denna fråga kan förbättra flera användningar av ELLER frågor
db.students.find(lastName:{$in:["Ghosh", "Amin"]})
{ "_id" : ObjectId("58f29a694117d1b7af126dca"), "studentNo" : 1, "firstName" : "Prosen", "lastName" : "Ghosh", "age" : 25 }
{ "_id" : ObjectId("58f29a694117d1b7af126dcb"), "studentNo" : 2, "firstName" : "Rajib", "lastName" : "Ghosh", "age" : 25 }
{ "_id" : ObjectId("58f29a694117d1b7af126dcc"), "studentNo" : 3, "firstName" : "Rizve", "lastName" : "Amin", "age" : 23 }
Liknande mySql-fråga som kommandot ovan
select * from students where lastName in ('Ghosh', 'Amin')
find () -metod med Projection
Den grundläggande syntaxen för metoden find()
med projektion är följande
> db.COLLECTION_NAME.find({},{KEY:1});
Om du vill visa alla dokument utan åldersfältet är kommandot som följer
db.people.find({},{age : 0});
Om du vill visa alla dokument åldersfältet är kommandot som följer
Hitta () -metod med Projection
I MongoDB betyder projektion att bara välja nödvändiga data snarare än att välja hela dokumentets data.
Den grundläggande syntaxen för metoden find()
med projektion är följande
> db.COLLECTION_NAME.find({},{KEY:1});
Om du vill visa alla dokument utan åldersfältet är kommandot som följer
> db.people.find({},{age:0});
Om du bara vill visa åldersfältet är kommandot som följer
> db.people.find({},{age:1});
Obs: _id
fältet visas alltid när du kör metoden find()
, om du inte vill ha det här fältet måste du ställa in det som 0
.
> db.people.find({},{name:1,_id:0});
Obs: 1
används för att visa fältet medan 0
används för att dölja fälten.
begränsa, hoppa över, sortera och räkna resultaten av metoden find ()
I likhet med aggregeringsmetoder med metoden find () har du möjlighet att begränsa, hoppa över, sortera och räkna resultaten. Låt oss säga att vi har följande samling:
db.test.insertMany([
{name:"Any", age:"21", status:"busy"},
{name:"Tony", age:"25", status:"busy"},
{name:"Bobby", age:"28", status:"online"},
{name:"Sonny", age:"28", status:"away"},
{name:"Cher", age:"20", status:"online"}
])
Så här listar du samlingen:
db.test.find({})
Kommer att återvända:
{ "_id" : ObjectId("592516d7fbd5b591f53237b0"), "name" : "Any", "age" : "21", "status" : "busy" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b1"), "name" : "Tony", "age" : "25", "status" : "busy" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b2"), "name" : "Bobby", "age" : "28", "status" : "online" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b3"), "name" : "Sonny", "age" : "28", "status" : "away" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b4"), "name" : "Cher", "age" : "20", "status" : "online" }
För att hoppa över de tre första dokumenten:
db.test.find({}).skip(3)
Kommer att återvända:
{ "_id" : ObjectId("592516d7fbd5b591f53237b3"), "name" : "Sonny", "age" : "28", "status" : "away" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b4"), "name" : "Cher", "age" : "20", "status" : "online" }
För att sortera fallande efter fältnamnet:
db.test.find({}).sort({ "name" : -1})
Kommer att återvända:
{ "_id" : ObjectId("592516d7fbd5b591f53237b1"), "name" : "Tony", "age" : "25", "status" : "busy" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b3"), "name" : "Sonny", "age" : "28", "status" : "away" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b4"), "name" : "Cher", "age" : "20", "status" : "online" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b2"), "name" : "Bobby", "age" : "28", "status" : "online" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b0"), "name" : "Any", "age" : "21", "status" : "busy" }
Byt ut -1 med 1 om du vill sortera stigande
För att räkna resultaten:
db.test.find({}).count()
Kommer att återvända:
5
Kombinationer av dessa metoder är också tillåtna. Få till exempel två dokument från nedstämd sorterad samling som hoppar över den första 1:
db.test.find({}).sort({ "name" : -1}).skip(1).limit(2)
Kommer att återvända:
{ "_id" : ObjectId("592516d7fbd5b591f53237b3"), "name" : "Sonny", "age" : "28", "status" : "away" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b4"), "name" : "Cher", "age" : "20", "status" : "online" }