from:
prject:Overview
MongoDB is a cross-platform, document oriented database that provides, high
performance, high availability, and easy scalability. MongoDB works on concept of collection and document.Database
Database is a physical container for collections. Each database gets its own set
of files on the file system. A single MongoDB server typically has multiple databases.Collection
Collection is a group of MongoDB documents. It is the equivalent of an RDBMS
table. A collection exists within a single database. Collections do not enforce a schema. Documents with a collection can have different fields. Typically, all documents in a collection are of similar or related purpose.Document
A document is a set of key-value pairs. Documents have dynamic schema. Dynamic
schema means that documents in the same collection do not need to have the same set of fields or structure, and common fields in a collection's documents may hold different types of data.Below given table shows the relationship of RDBMS terminology with MongoDB
RDBMS | MongoDB |
---|---|
Database | Database |
Table | Collection |
Tuple/Row | Document |
column | Field |
Table Join | Embedded Documents |
Table Join | Primary Key(Default key _id provided by mongodb itself) |
Sample document
Below given example shows the document structure of a blog site which is simply
a comma separated key value pair.{ _id: ObjectId(7df78ad8902c) title: 'MongoDB Overview', description: 'MongoDB is no sql database', by: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100, comments: [ { user:'user1', message: 'My first comment', dateCreated: new Date(2011,1,20,2,15), like: 0 }, { user:'user2', message: 'My second comments', dateCreated: new Date(2011,1,25,7,45), like: 5 } ]}
Database
check all the databases:
> show dbs local 0.000GB mrf 0.000GB test 0.005GB
create database: for example create mydb
> use mydbswitched to db mydb> show dbslocal 0.000GBmrf 0.000GBtest 0.005GB
The database mydb has not been created, because the db is empty,
You must create at lest one collection next.For example:>> use mydbswitched to db mydb> show dbslocal 0.000GBmrf 0.000GBtest 0.005GB>> show collections> db.user.insert({name:"Ryan"})WriteResult({ "nInserted" : 1 })> show dbslocal 0.000GBmrf 0.000GBmydb 0.000GBtest 0.005GB
check current database:
> dbmydb
switch db:
> dbmydb> use testswitched to db test> dbtest
drop database:
> show dbslocal 0.000GBmrf 0.000GBmydb 0.000GBtest 0.005GB> use mydbswitched to db mydb> db.dropDatabase(){ "dropped" : "mydb", "ok" : 1 }> show dbs;local 0.000GBmrf 0.000GBtest 0.005GB
create collection
when you insert data, if the collection not exists, it will be created automatically:
> show collectionsrestaurantstest> db.mycollection.insert({name:"test"})WriteResult({ "nInserted" : 1 })> show collectionsmycollectionrestaurantstest
Of course, there is other way to create a specify collection:
Syntax
Basic syntax of createCollection() command is as follows:
db.createCollection(name, options)
In the command, name
is the name of collection created, Options
is a document
Options
parameter is optional, so you need to specify only name of the collection.
Filed | Type | Description |
---|---|---|
capped | Boolean | (Optional) If true, enables a capped collection. Capped collection is a collection fixed size collection that automatically overwrites its oldest entries when it reaches its maximum size. If you sepecify true, you need specify size parameter too |
autoIndexID | Boolean | (Optional) If true, automatically create index on _id filed. Default value is false |
size | number | (Optional) Specify a maximum size in bytes for a capped collection. If capped is true, then you need specify this filed also |
max | number | (Optional) Specifies the maximum number of documents allowed in the capped collection. |
while inserting the document , MongoDB first checks size filed of capped collection, then it checks max filed.
Example
> db.mycollection.drop()true> show collectionsrestaurantstest>>> db.createCollection("mycollection"){ "ok" : 1 }> show collectionsmycollectionrestaurantstest>> db.createCollection("mycol",{capped:true,autoIndexID:true,size:6142800, max:10000}){ "ok" : 1 }> show collectionsmycolmycollectionrestaurantstest>
drop()
> use testswitched to db test> show collectionsmycolmycollectionrestaurantstest> db.mycol.drop()true> show collectionsmycollectionrestaurantstest
DataType
MongoDB supports many datatypes whose list is given below:
String : This is most commonly used datatype to store the data. String in mongodb must be UTF-8 valid.
Integer : This type is used to store a numerical value. Integer can be 32 bit or 64 bit depending upon your server.Boolean : This type is used to store a boolean (true/ false) value.Double : This type is used to store floating point values.Min/ Max keys
: This type is used to compare a value against the lowest and highest BSON elements.Arrays : This type is used to store arrays or list or multiple values into one key.Timestamp : ctimestamp. This can be handy for recording when a document has been modified or added.Object : This datatype is used for embedded documents.Null : This type is used to store a Null value.Symbol : This datatype is used identically to a string however, it's generally reserved for languages that use a specific symbol type.Date : This datatype is used to store the current date or time in UNIX time format. You can specify your own date time by creating object of Date and passing day, month, year into it.Object ID: This datatype is used to store the document’s ID.Binary data : This datatype is used to store binay data.Code : This datatype is used to store javascript code into document.Regular expression : This datatype is used to store regular expression Insert
MongoDB insert option:
> show dbs;local 0.000GBmrf 0.000GBtest 0.005GB> use testswitched to db test> show collections;mycollectionrestaurantstest>>> db.mycollection.insert({ title:"MongoDB Overview", description:'MongoDB is no sql database', by:'tutorials point', url:'http://www.tutorialspoint.com', tags:['mongodb','database','NoSQL'], likes:100 })WriteResult({ "nInserted" : 1 })>> db.mycollection.find(){ "_id" : ObjectId("577e0dce99da0904659393c0"), "title" : "MongoDB Overview", "description" : "MongoDB is no sql database", "by" : "tutorials point", "url" : "http://www.tutorialspoint.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }> db.mycollection.find().pretty(){ "_id" : ObjectId("577e0dce99da0904659393c0"), "title" : "MongoDB Overview", "description" : "MongoDB is no sql database", "by" : "tutorials point", "url" : "http://www.tutorialspoint.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100}>
Here mycollections
is our collection name, as created in previous tutorial. If the
In the inserted document if we don't specify the _id
parameter, then MongoDB
_id
is 12 bytes hexadecimal number unique for every document in a collection.
_id: ObjectId(4 bytes timestamp, 3 bytes machine id, 2 bytes process id, 3 bytes incrementer)
To insert multiple documents in single query, you can pass an array of documents
in insert() command.Example
db.post.insert([ { title: 'MongoDB Overview', description: 'MongoDB is no sql database', by: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }, { title: 'NoSQL Database', description: 'NoSQL database doesn\'t have tables', by: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 20, comments: [ { user:'user1', message: 'My first comment', dateCreated: new Date(2013,11,10,2,35), like: 0 } ] }])
find()
The find() Method
To query data from MongoDB collection, you need to user MongoDB's find()
method.
Syntax
Basic syntax of find() method id as follows:
db.collection_name.find()
find()
method will display all the documents in a non structured way.
The pretty() Method
To display the results in a formatted way, you can use pretty()
method.
db.collection_name.find().pretty()
Example
> show collectionsmycollectionpostrestaurantstest> db.post.find().pretty(){ "_id" : ObjectId("577e11fd502847799b05f062"), "title" : "MongoDB Overview", "description" : "MongoDB is no sql database", "by" : "tutorials point", "url" : "http://www.tutorialspoint.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100}{ "_id" : ObjectId("577e11fd502847799b05f063"), "title" : "NoSQL Database", "description" : "NoSQL database doesn't have tables", "by" : "tutorials point", "url" : "http://www.tutorialspoint.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 20, "comments" : [ { "user" : "user1", "message" : "My first comment", "dateCreated" : ISODate("2013-12-10T10:35:00Z"), "like" : 0 } ]}>
RDBMS Where Clause Equivalents in MongoDB
To query the document on the basis of some codition, you can use following
options:Options | Syntax | Example | RDBMS Equivalent |
---|---|---|---|
Equal | {<key>:<value>} | db.mycol.find({'by':'abc'}).pretty() | where by='abc' |
Less Than | {<key>:{ \(lt:\<value\>}}|db.mycol.find({'likes':{\)lt:50}}).pretty() | where likes < 50 | |
Less Than Equals | {<key>:{ \(lte:\<value\>}}|db.mycol.find({'likes':{\)lte:50}}).pretty() | where likes <= 50 | |
Greater Than | {<key>:{ \(gt:\<value\>}}|db.mycol.find({'likes':{\)gt:50}}).pretty() | where likes > 50 | |
Greater Than Equals | {<key>:{ \(gte:\<value\>}}|db.mycol.find({'likes':{\)gte:50}}).pretty() | where likes >= 50 | |
Not Equals | {<key>:{ \(ne:\<value\>}}|db.mycol.find({'likes':{\)ne:50}}).pretty() | where likes != 50 |
Example
> db.mycol.find().pretty(){ "_id" : ObjectId("577e19c5502847799b05f064"), "title" : "MongoDB Overview", "description" : "MongoDB is no sql database", "by" : "tutorials point", "url" : "http://www.tutorialspoint.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100}{ "_id" : ObjectId("577e19c5502847799b05f065"), "title" : "NoSQL Database", "description" : "NoSQL database doesn't have tables", "by" : "tutorials point", "url" : "http://www.tutorialspoint.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 20, "comments" : [ { "user" : "user1", "message" : "My first comment", "dateCreated" : ISODate("2013-12-10T10:35:00Z"), "like" : 0 } ]}>> db.mycol.find({'likes':{$gt:50}}).pretty(){ "_id" : ObjectId("577e19c5502847799b05f064"), "title" : "MongoDB Overview", "description" : "MongoDB is no sql database", "by" : "tutorials point", "url" : "http://www.tutorialspoint.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100}> db.mycol.find({'likes':{$lt:50}}).pretty(){ "_id" : ObjectId("577e19c5502847799b05f065"), "title" : "NoSQL Database", "description" : "NoSQL database doesn't have tables", "by" : "tutorials point", "url" : "http://www.tutorialspoint.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 20, "comments" : [ { "user" : "user1", "message" : "My first comment", "dateCreated" : ISODate("2013-12-10T10:35:00Z"), "like" : 0 } ]}
AND in MongoDB
Syntax
In thefind()
method if you pass multiple keys by separating them by ',
' then MongoDB treats itAND
condition. Basic syntax of AND
is shown below: db.mycol.find({ keys:value, key2:value2 }).pretty()
Example:
Below given example will show all the tutorials written by and
whose title is 'MongoDB OVerview':> db.mycol.find({"by":"tutorials point","title":"MongoDB Overview"}).pretty(){ "_id" : ObjectId("577e19c5502847799b05f064"), "title" : "MongoDB Overview", "description" : "MongoDB is no sql database", "by" : "tutorials point", "url" : "http://www.tutorialspoint.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100}
For the above given example equivalent where clause will be
where by='tutorials point' AND title = 'MongoDB Overview'
. You can pass any number of key, value pairs in find clause. OR in MongoDB
Syntax
To query documents based on the OR condition, you need to use $or
keyword.
>db.mycol.find( { $or: [ {key1: value1}, {key2:value2} ] }).pretty()
Example
> db.mycol.find({ $or:[ {"title":"MongoDB Overview"},{"likes":20} ]}).pretty(){ "_id" : ObjectId("577e19c5502847799b05f064"), "title" : "MongoDB Overview", "description" : "MongoDB is no sql database", "by" : "tutorials point", "url" : "http://www.tutorialspoint.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100}{ "_id" : ObjectId("577e19c5502847799b05f065"), "title" : "NoSQL Database", "description" : "NoSQL database doesn't have tables", "by" : "tutorials point", "url" : "http://www.tutorialspoint.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 20, "comments" : [ { "user" : "user1", "message" : "My first comment", "dateCreated" : ISODate("2013-12-10T10:35:00Z"), "like" : 0 } ]}
Using AND and OR together
####Example
Below given example will show the documents that have likes greater than 10 and whose title is either 'MongoDB Overview' or by is 'tutorials point': Equals:where likes>10 AND (by = 'tutorials point' OR title = 'MongoDB Overview')
> db.mycol.find({ "likes": {$gt:10}, $or: [ {"by": "tutorials point"}, {"title": "MongoDB Overview"} ]}).pretty(){ "_id" : ObjectId("577e19c5502847799b05f064"), "title" : "MongoDB Overview", "description" : "MongoDB is no sql database", "by" : "tutorials point", "url" : "http://www.tutorialspoint.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100}{ "_id" : ObjectId("577e19c5502847799b05f065"), "title" : "NoSQL Database", "description" : "NoSQL database doesn't have tables", "by" : "tutorials point", "url" : "http://www.tutorialspoint.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 20, "comments" : [ { "user" : "user1", "message" : "My first comment", "dateCreated" : ISODate("2013-12-10T10:35:00Z"), "like" : 0 } ]}