Перейти до основного вмісту

Робота з масивами

Оператор $in визначає масив можливих виразів та шукає ті ключі, значення які є в масиві:

db.cats.find({ age: { $in: [2, 10] } });

Результат:

{
"_id" : ObjectId("5f8382425ba83a4f1829ca5c"),
"name" : "Lama",
"age" : 2.0,
"features" : [
"ходить у лоток",
"не дає себе гладити",
"сірий"
]
}

{
"_id" : ObjectId("5f838b225ba83a4f1829ca60"),
"name" : "Dariy",
"age" : 10.0,
"features" : [
"ходить у лоток",
"не дає себе гладити",
"сірий"
],
"owners" : {
"name" : "Nata",
"age" : 23.0,
"address" : "Poltava"
}
}

Протилежним чином діє оператор $nin - він визначає масив можливих виразів і шукає ключі, значення яких відсутня в цьому масиві

db.cats.find({ age: { $nin: [2, 10] } });

Оператор $all схожий на $in: він також визначає масив можливих виразів, але вимагає, щоб документи мали весь визначений набір виразів.

db.cats.find({ features: { $all: ['ходить у лоток', 'дає себе гладити'] } });

Результат:

{
"_id" : ObjectId("5f8382425ba83a4f1829ca5d"),
"name" : "Liza",
"age" : 4.0,
"features" : [
"ходить у лоток",
"дає себе гладити",
"білий"
]
}

{
"_id" : ObjectId("5f8383025ba83a4f1829ca5f"),
"name" : "Murzik",
"age" : 1.0,
"features" : [
"ходить у лоток",
"дає себе гладити",
"чорний"
]
}

Оператор $size використовується для знаходження документів, у яких масиви мають число елементів, що дорівнює значенню $size.

db.cats.find({ features: { $size: 3 } });

Оператор $push додає значення в масив

db.cats.updateOne({ name: 'Tom' }, { $push: { features: 'смердючий' } });

Якщо потрібно додати відразу кілька значень

db.cats.updateOne(
{ name: 'Tom' },
{ $push: { features: { $each: ['хропе', 'злий'] } } },
);

Оператор $addToSet подібно до оператора $push додає об'єкти у масив. Відмінність полягає в тому, що $addToSet додає дані, якщо їх ще немає у масиві:

db.cats.update({ name: 'Lama' }, { $addToSet: { features: 'божевільний' } });

Оператор $pop дозволяє видаляти елемент із масиву:

db.cats.update({ name: 'Tom' }, { $pop: { features: 1 } });

1 кінець масиву -1 початок масиву

Оператор $pull видаляє за значенням

db.cats.update({ name: 'Tom' }, { $pull: { features: 'сірий' } });

Якщо ми хочемо видалити не одне значення, а відразу кілька, тоді ми можемо застосувати оператор $pullAll:

db.cats.update(
{ name: 'Tom' },
{ $pullAll: { features: ['не дає себе гладити', 'смердючий', 'хропе'] } },
);