понедельник, 16 декабря 2013 г.

MongoDB базовые функции под python ( pymongo )

MongoDB - документо-ориентированная система управления базами данных (СУБД) с открытым исходным кодом, не требующая описания схемы таблиц.

# coding: utf8

import pymongo

from pymongo import Connection
connection = Connection()

# Удалить БД, если она существует
connection.drop_database("test_database")

# Выбираем БД
db = connection.test_database
# либо: db = connection["test_database"]

# Удалить коллекцию
db.drop_collection('users')

# Добавление документов в колекцию 'users'
db.users.save( { 'name':'user 1', 'level':1 } )
db.users.save( { 'name':'user 2', 'level':2 } )
db.users.insert( { 'name':'user 3', 'level':3 } )

# Полное имя колекции
print db.users.full_name

# Получить все документы
for user in db.users.find():
    print user

# Выбрать конкретные атрибуты
users = db.users.find({},{ 'login':1, 'name':1 })

# Получить один документ по условию
user = db.users.find_one({'name':'user 1'})

# Получить/установить значение
print user['level']
user['level'] = 7

# Сохранить документ
db.users.save(user)

# Удалить документ
db.users.remove(user)

# Установить значение в документе
db.users.update({ 'name':'user 2' }, { "$set": { 'level':5 } })

# Кол-во документов
print 'Count',db.users.count()
print 'Count lvl=2',db.users.find({'level':2}).count()

# Сортировка
for user in db.users.find().sort('level'):
    print user
# в обратном порядке: .sort('level',pymongo.DESCENDING)
# Сортировка по нескольким атрибутам
    db.users.find({}).sort( [('status',1),('level',-1)] )

# Ограничение выборки, пропустить один документ и выбрать не более двух
for user in db.users.find().skip(1).limit(2):
    print user

# Условия
for user in db.users.find().where('this.name == "user 2" || this.level>3'):
    print user

# Выбрать неповторяющиеся записи
for user in db.users.distinct('level'):
    print user

# Поиск регулярным выражением
import re
regex = re.compile('^us', re.I | re.U) 
result = db.collection.find({ 'name':regex })

IT-записки

comments powered by Disqus