Робота з масивами
Оператор $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: ['не дає себе гладити', 'смердючий', 'хропе'] } },
);