Zarządzanie danymi w bazie MongoDB
Serwer i baza danych
Instalujemy MongoDB z pakietów dostępnym w repozytorium dystrybucji lub pobieramy gotową binarną paczkę na stronie MongoDB, którą wystarczy rozpakować i gotowe. By uruchomić serwer wystarczy w konsoli wykonać:Podstawowe operacje na bazie danych
API jest proste w użyciu - łączymy się z serwerem, wybieramy bazę, wybieramy kolekcję i możemy na niej operować:# -*- coding: utf-8 -*-
from pymongo import Connection
connection = Connection()
# test_db to nazwa bazy danych
db = connection.test_db
# first_collection to nazwa kolekcji
collection = db.first_collection
# ile dokumentów w kolekcji?
print collection.count()
# -*- coding: utf-8 -*-
from pymongo import Connection
from pymongo import ASCENDING, DESCENDING
connection = Connection()
# test_db to nazwa bazy danych
db = connection.test_db
# first_collection to nazwa kolekcji
collection = db.first_collection
collection.insert({"title": "Tom", "age": 23})
collection.insert({"title": "Kate", "age": 21, "location": "UK", "phone": 1111111})
collection.insert([{"title": "Anna 1", "age": 33}, {"title": "Anna 2", "age": 34}])
print collection.count()
# -*- coding: utf-8 -*-
from pymongo import Connection
from pymongo import ASCENDING, DESCENDING
connection = Connection()
# test_db to nazwa bazy danych
db = connection.test_db
# first_collection to nazwa kolekcji
collection = db.first_collection
# pobieramy wszystkie dokumenty
docs = collection.find()
for i in docs:
print i
# pobieramy jeden dokument
print
print collection.find_one({"title": "Anna 1"})
print
# pobieramy dokumenty z warunkami
docs = collection.find({"title": {'$exists': True}}).sort('_id', DESCENDING).skip(1).limit(2)
for i in docs:
print i
{u'age': 23, u'_id': ObjectId('4b9bb0c5e1382315db000000'), u'title': u'Tom'} {u'phone': 1111111, u'age': 21, u'_id': ObjectId('4b9bb0c5e1382315db000001'), u'location': u'UK', u'title': u'Kate'} {u'age': 33, u'_id': ObjectId('4b9bb0c5e1382315db000002'), u'title': u'Anna 1'} {u'age': 34, u'_id': ObjectId('4b9bb0c5e1382315db000003'), u'title': u'Anna 2'}
# -*- coding: utf-8 -*-
from pymongo import Connection
from pymongo import ASCENDING, DESCENDING
from datetime import datetime
connection = Connection()
# test_db to nazwa bazy danych
db = connection.test_db
# first_collection to nazwa kolekcji
collection = db.first_collection
# aktualizacja dokumentu
collection.update({"title": "Anna 2"}, {"$set": {"date": datetime.utcnow()}})
print collection.find_one({"title": "Anna 2"})
W powyższym przykładzie aktualizujemy jeden dokument zmieniając wartość klucza "date". Dodatkowe argumenty tej metody to safe - jeżeli ustawimy na True to API upewni się czy operacja została wykonana, upsert - jeżeli True to stworzony zostanie dokument, jeżeli nie istnieje, multi - jeżeli True to operacja aktualizacji obejmie wszystkie pasujące dokumenty (a nie tylko jeden).
Sama baza może przechowywać pliki o rozmiarze do 4 MB. Większe pliki obsługiwane są bardzo efektywnie przez rozszerzenie GridFS (z obsługą replikacji plików).
Obiekt collection na którym operujemy posiada także inne metody odpowiedzialne m.in. za tworzenie, usuwanie indeksów, dokumentów itd. Wszystkie są ładnie udokumentowane. Polecam także wykład poświecony MongoDB i jej zaawansowanym opcjom.
Comment article