Plan zajęć
- Baza dokumentowa NoSQL - MongoDB
- Dostęp do bazy MongoDB w języku php
$ mongosh -u user 172.20.44.30/dbase -p
$ mongosh 172.20.44.30/dbase
> db.auth("user","pass")
db.createCollection("student")
show collections
u1={fname:"Adam", lname:"Abacki", faculty:"WFiIS", year:1 }
u2={fname:"Bogdan", lname:"Babacki", faculty:"WFiIS", year:1 }
u3={fname:"Robert", lname:"Cabacki", faculty:"WFiIS", year:1 }
u4={fname:"Marek", lname:"Dabacki", faculty:"WFiIS", year:1 }
db.student.insertOne(u1)
db.student.insertOne(u2)
db.student.insertOne(u3)
db.student.insertOne(u4)
var stud = [
{fname:"Adam", lname:"Abacki", faculty:"WFiIS", year:1 },
{fname:"Bogdan", lname:"Babacki", faculty:"WFiIS", year:1 },
{fname:"Robert", lname:"Cabacki", faculty:"WFiIS", year:1 },
{fname:"Marek", lname:"Dabacki", faculty:"WFiIS", year:1 } ] ;
db.student.insertOne(stud)
db.student.find()
db.student.find({lname:"Abacki"})
db.student.find({},{lname:1})
db.student.find({$or:[{lname:"Abacki"},{lname:"Babacki"}]})
db.student.find({},{fname:1}).sort({fname:1})
db.student2023.find({},{fname:1}).sort({fname:1}).toArray()[3].fname
db.student.find().limit(2)
db.student.find().limit(2).skip(2)
db.student.updateMany({},{$set:{academy:"AGH"}},{multi:true})
db.student.deleteOne({fname:"Adam"})
db.student.deleteMany({})
db.student.drop()
db.createCollection("student")
u1={fname:"Adam", lname:"Abacki", faculty:"WFiIS", year:1 }
u2={fname:"Bogdan", lname:"Babacki", faculty:"WFiIS", year:1 }
u3={fname:"Robert", lname:"Cabacki", faculty:"WFiIS", year:1 }
u4={fname:"Marek", lname:"Dabacki", faculty:"WFiIS", year:1 }
db.student.insertOne(u1)
db.student.insertOne(u2)
db.student.insertOne(u3)
db.student.insertOne(u4)
func1 = function () { for ( var i=0; i<4; i++ ) {
print(db.student.find({},{fname:1}).toArray()[i].fname) ; } }
func1()
func2 = function () {
for ( var i=0; i<100; i++) {
db.student.insertOne({x:i})
}
var cursor = db.student.find({},{x:1}).sort({x:1}) ;
while (cursor.hasNext()) {
obj = cursor.next();
print(obj.x);
} }
func2()
db.createCollection("test")
func3 = function () {
for ( var i=0; i<100; i++) {
db.test.insertOne( { "i" : i, "username" : "user"+i,
"age" : Math.floor(Math.random()*120), "create" : new Date() } ) ;
} }
func3()
db.test.find({})
var map = function() { emit ('all', this.i); }
var reduce = function(key,value) { return Array.sum(value); }
db.test.mapReduce( map, reduce, { query:{i:{$lt:10}}, out:"result"} )
db.result.find({})
Obecna wersja bazy MongoDB zaleca używanie zamiast Map-Reduce - Aggregation Pipeline.
Map-Reduce to Aggregation Pipeline.
W ramach zadania zostanie zrealizowany dostęp do bazy danych MongoDB z skryptu php. Poniżej znajdują się pliki umożliwiające zrealizowanie zadania.
{
"require": {
"mongodb/mongodb": "^1.4"
}
}
Plik mongo.php - ( [listing dokumentu] [link do dokumentu] )
<?php
//require 'vendor/autoload.php' ;
class db {
private $user = "user" ;
private $pass = "pass";
private $host = "172.20.44.30";
private $base = "dbase" ;
private $coll = "student";
private $conn;
private $dbase;
private $collection;
function __construct() {
$this->conn = new MongoDB\Client("mongodb://{$this->user}:{$this->pass}@{$this->host}/{$this->base}");
//$this->conn = new MongoDB\Client($this->url_atlas);
//print_r( $this->conn ) ;
//$command = new MongoDB\Driver\Command(array("ping" => 1));
//$result = $this->conn->executeCommand("test", $command);
//var_dump($result, $result->toArray());
//$this->dbase = $this->conn->selectDB($this->base);
//$this->collection = $this->dbase->selectCollection($this->coll);
$this->collection = $this->conn->{$this->base}->{$this->coll};
//print_r ( $this->collection ) ;
}
function select() {
$cursor = $this->collection->find();
$table = iterator_to_array($cursor);
return $table ;
}
function insert($user) {
$ret = $this->collection->insertOne($user) ;
return $ret;
}
function update($ident,$user,$flag) {
if ( $flag ) {
$rec = new MongoDB\BSON\ObjectId($ident);
$filter = array ( '_id' => $rec );
} else {
$filter = array ( 'ident' => $ident );
}
$update = array ( '$set' => $user );
//$option = array ( 'w' => 1 );
//$ret = $this->collection->update($filter,$update,$option);
$updresult = $this->collection->updateOne($filter,$update);
//return $ret['nModified'];
$ret = $updresult->getModifiedCount();
return $ret;
}
function delete($ident,$flag) {
if ( $flag ) {
$rec = new MongoDB\BSON\ObjectId($ident);
$filter = array ( '_id' => $rec );
} else {
$filter = array ( 'ident' => $ident );
}
//$option = array( 'justOne' => true, 'w' => 1 );
//$ret = $this->collection->remove($filter,$option);
$delresult = $this->collection->deleteOne($filter);
$ret = $delresult->getDeletedCount();
//return $ret['n'];
return $ret;
}
}
Plik test_mongo.php - ( [listing dokumentu] [link do dokumentu] )
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require 'vendor/autoload.php' ;
include 'mongo/mongo.php';
$db = new db();
print "<pre>" ;
print "Polaczono z baza danych" ;
// Test insert()
print "Test insert() function <br/>" ;
$record = array ( 'ident' => 1, 'fname' => 'mirek', 'lname' => 'kowalski', 'faculty' => 'wfiis', 'year' => '2015' ) ;
$flag = $db->insert($record);
//print "[ ".$flag." ]";
print $flag?"OK":"not OK";
print "<br/>";
$record = array ( 'ident' => 2, 'fname' => 'adam', 'lname' => 'abacki', 'faculty' => 'wfiis', 'year' => '2015' ) ;
$flag = $db->insert($record);
//print "[ ".$flag." ]";
print $flag?"OK":"not OK";
print "<br/>";
print "\n<br/>------------ <br/>\n" ;
// Test select()
print "Test select() function <br/>\n" ;
$data = $db->select();
print_r($data) ;
print "\n<br/>------------ <br/>\n" ;
// Test delete()
print "Test delete() function <br/>\n" ;
$id = 1 ;
$flag = $db->delete($id,0) ;
print "[ ".$flag." ]";
print "\n<br/>----------- <br/>\n" ;
// Test update()
print "Test update() function <br/>\n";
$id = 2 ;
$data = array ( 'year' => '2016' ) ;
$flag = $db->update($id,$data,0) ;
print "[ ".$flag." ]";
print "\n<br/>----------- <br/>\n" ;
print "</pre>" ;
?>
Linki dostępne z sieci wydziałowej.