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" }


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow