воскресенье, 19 января 2014 г.

MongoDB выборка

CRUD      MongoDB       SQL
Create        Insert               Insert
Read           Find                Select
Update        Update           Update
Delete         Remove           Delete


Команды:
db - показать поточную базу.


db.people.{action}
db - key word
people - collection (like table in sql)




Actions

.find( selector | undefined ) -- select all
.findOne( selector | undefined ) -- вивести только первый

Эти две функции могут принимать объект селектора, который отыграет роль фильтра.
selector = {condition, which_fields_only};
which_fields_only = {the_field: true, _id: false};
_id - поле, которое только одно по-умолчанию помещается в результат после применения селектора.
_id = ObjectId("fgfd23423423423432egdf") // генеруеться Mongo, вставляеться в кожен запис колекції, являється унікальним ідентифікатором.

db.employees.find({position: "developer"})


find выводит 20 записей с настройками по-умолчанию, если в курсоре содержится еще, то следующие 20 можно вывести командой it

db.some.find().pretty() - приводит к более читабельному внешнему виду.

Conditions of Selector

$gt, $gte, $lt, $lte

var condition = {
  the_field_in_record: { $gt: 50, $lte: 57 }
};
Если в записях под таким именем находятся не только числа, но и строки например, то в результате будут записи только того типа, по которому мы проводим сравнение.

$exists, $type, $regex

var condition = {
  the_field_in_record: { $exists: true | false}
};
var condition = {
  the_field_in_record: { $type: 2} // 2 - this numbers defined in bson specification. The 2 is for String
};

$or, $and

var condition = {
  $or: [
     {the_field_1: { $regex: "ends with this subtring$"}},
     {the_field_2: { $exists: true}}
  ]
};
$and - менее эффективный по сравнению с написанием обычного кондишина (в котором все условия обьединяются логическим И)

Condition for array inside

var condition = {
  the_field_in_record: "value"
};
Если the_field_in_record является массивом, и среди его элементов, будет значение "value", то такой рекорд проходит фильтрацию.

Condition for array $all, $in

$all - документ-массив, должен содержать все указанные элементы
$in - один из указанных
< db.users.find( { friends : { $all : [ "Joe" , "Bob" ] }, favorites : { $in : [ "running" , "pickles" ] } } );
{ name : "Cliff" , friends : [ "Pete" , "Joe" , "Tom" , "Bob" ] , favorites : [ "pickles", "cycling" ] }

Condition Dot Notation

Якщо ми починаємо вибирати записи по значенням підполів, то тоді вступає умова, що об'єкт має строго відповідати вказаній умові. Що мається на увазі: ми не можемо вказати лише певні підполя, або навіть змінити порядок полів, указавшни при цьому всі -- все одно це не буде сприйматись як співпадінням. Саме для цього і ввели дотнотейшин, де ми можемо вказати лише одне-декілька подполів
var condition = {
  "the_field_in_record.its_subfield": "value"
};
Ось більш наглядний приклад:
Найти дороже 10 000 при этом с рейтингом 5 и выше
{ product : "Super Duper-o-phonic", 
  price : 100000000000,
  reviews : [ { user : "fred", comment : "Great!" , rating : 5 },
              { user : "tom" , comment : "I agree with Fred, somewhat!" , rating : 4 } ],
  ... 
}
db.catalog.find({price: {$gt: 10000}, "reviews.rating": {$gte: 5}})

Комментариев нет:

Отправить комментарий