MongoDB
In this MongoDB tutorial we will learn to query arrays.
Login to your MongoDB server and insert the following documents.
For this tutorial I will insert the following documents in the posts collection.
> db.posts.insertMany([ { "title": "This is my first post!", "tags": ["awesome", "post", "blog"] }, { "title": "Dinner time :)", "tags": ["food", "dinner", "fun"] }, { "title": "Birthday Treat", "tags": ["fun", "food", "birthday", "treat", "party"] } ]);
In the following example we are going to fetch documents having exactly 3 elements in the array and values are awesome, post and blog in that order.
awesome
post
blog
> db.posts.find({ "tags": ["awesome", "post", "blog"] }).pretty(); { "_id" : ObjectId("5d1b43d9085e37060f4c36b5"), "title" : "This is my first post!", "tags" : [ "awesome", "post", "blog" ] }
Note! If we change the positions of the array elements in the above query then we will not get the same result.
In the following example we are going to fetch all the documents having an array field tags that contains food as one of the element in the array.
tags
food
> db.posts.find({ "tags": "food" }).pretty(); { "_id" : ObjectId("5d1b43d9085e37060f4c36b6"), "title" : "Dinner time :)", "tags" : [ "food", "dinner", "fun" ] } { "_id" : ObjectId("5d1b43d9085e37060f4c36b7"), "title" : "Birthday Treat", "tags" : [ "fun", "food", "birthday", "treat", "party" ] }
In the following example we are going to fetch all the documents having an array field tags with some or all of the values from a list of values food, dinner and fun in any order.
dinner
fun
Any document having "food", "fun" or "dinner" in any order in the tags array is fetched.
> db.posts.find({ tags: { $in: ["food", "fun", "dinner"] } }).pretty(); { "_id" : ObjectId("5d1b43d9085e37060f4c36b6"), "title" : "Dinner time :)", "tags" : [ "food", "dinner", "fun" ] } { "_id" : ObjectId("5d1b43d9085e37060f4c36b7"), "title" : "Birthday Treat", "tags" : [ "fun", "food", "birthday", "treat", "party" ] }
In the following example we are going to fetch all documents that has an array field tags having all of the values from a list of values food, dinner and fun in any order.
> db.posts.find({ tags: { $all: ["food", "fun", "dinner"] } }).pretty(); { "_id" : ObjectId("5d1b43d9085e37060f4c36b6"), "title" : "Dinner time :)", "tags" : [ "food", "dinner", "fun" ] }
In the following example we are going to fetch all the documents having an array field tags with 3 elements.
> db.posts.find({ "tags": { $size: 3 } }).pretty(); { "_id" : ObjectId("5d1b43d9085e37060f4c36b5"), "title" : "This is my first post!", "tags" : [ "awesome", "post", "blog" ] } { "_id" : ObjectId("5d1b43d9085e37060f4c36b6"), "title" : "Dinner time :)", "tags" : [ "food", "dinner", "fun" ] }