MongoDB - basic

mongoDB basic

from:http://www.tutorialspoint.com/mongodb prject:https://github.com/chenxing12/l4mongodb

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
      }
   ]
}

Getting-Start

top

Database

check all the databases:

> show dbs
 local  0.000GB
 mrf    0.000GB
 test   0.005GB

create database: for example create mydb

> use mydb
switched to db mydb
> show dbs
local  0.000GB
mrf    0.000GB
test   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 mydb
switched to db mydb
> show dbs
local  0.000GB
mrf    0.000GB
test   0.005GB
>
> show collections
> db.user.insert({name:"Ryan"})
WriteResult({ "nInserted" : 1 })
> show dbs
local  0.000GB
mrf    0.000GB
mydb   0.000GB
test   0.005GB

check current database:

> db
mydb

switch db:

> db
mydb
> use test
switched to db test
> db
test

drop database:

> show dbs
local  0.000GB
mrf    0.000GB
mydb   0.000GB
test   0.005GB
> use mydb
switched to db mydb
> db.dropDatabase()
{ "dropped" : "mydb", "ok" : 1 }
> show dbs;
local  0.000GB
mrf    0.000GB
test   0.005GB

collection

top

create collection

when you insert data, if the collection not exists, it will be created automatically:

> show collections
restaurants
test
> db.mycollection.insert({name:"test"})
WriteResult({ "nInserted" : 1 })
> show collections
mycollection
restaurants
test

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 and used to specify configuration of collection.

Options parameter is optional, so you need to specify only name of the collection. Following is the list of options you can use:

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 collections
restaurants
test
>
>
> db.createCollection("mycollection")
{ "ok" : 1 }
> show collections
mycollection
restaurants
test
>
> db.createCollection("mycol",{capped:true,autoIndexID:true,size:6142800, max:10000})
{ "ok" : 1 }
> show collections
mycol
mycollection
restaurants
test
>

drop()

> use test
switched to db test
> show collections
mycol
mycollection
restaurants
test
> db.mycol.drop()
true
> show collections
mycollection
restaurants
test

DataType

  1. top

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

  1. top

MongoDB insert option:

> show dbs;
local  0.000GB
mrf    0.000GB
test   0.005GB
> use test
switched to db test
> show collections;
mycollection
restaurants
test
>
>
> 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 databas
e", "by" : "tutorials point", "url" : "http://www.tutorialspoint.com", "tags" : [ "mongodb", "database", "NoSQL" ], "lik
es" : 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 collection doesn't exist in the database, then MongoDB will create this collection adn then insert document into it.

In the inserted document if we don't specify the _id parameter, then MongoDB assigns an unique ObjectId for this document.

_id is 12 bytes hexadecimal number unique for every document in a collection. 12 Bytes are dived as follows :

_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()

top

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 collections
mycollection
post
restaurants
test
> 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 the find() 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. Basic syntax of OR is shown below −

>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
                }
        ]
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

深入理解 Spring 事务原理

Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步...

382
来自专栏MasiMaro 的技术博文

OLEDB事务

学过数据的人一般都知道事务的重要性,事务是一种对数据源的一系列更新进行分组或者批处理以便当所有更新都成功时同时提交更新,或者任意一个更新失败时进行回滚将数据库中...

954
来自专栏冷冷

Spring 支持的事务隔离级别

并发事务所导致的问题:     当同一个应用程序或者不同应用程序中的多个事务在同一个数据集上并发执行时, 可能会出现许多意外的问题 并发事务所导致的问题可以分为...

1899
来自专栏高性能服务器开发

windows完成端口(六)

系列目录 windows完成端口(一) windows完成端口(二) windows完成端口(三) windows完成端口(四) windows完成端口(五) ...

2764
来自专栏分布式系统进阶

KafkaController分析3-ControllerChannelManager

使用NetworkClient连接到broker node, 使用selector处理网络IO;

531
来自专栏狂码一生

用MFC写一个聊天室程序 - 学习笔记

下面的服务器端与客户端的程序与步骤是我在学习MFC网络编程写一个聊天室程序所写的程序,在这里作一个笔记,也希望能帮到一部分刚刚学习的朋友,一起共勉,一起努力历进...

50714
来自专栏大数据钻研

深入理解 Spring 事务原理

一、事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到...

29110
来自专栏Java学习网

深入理解 Spring 事务原理

深入理解 Spring 事务原理 一、事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。...

3003
来自专栏JAVA后端开发

解决spring boot无法捕捉404异常问题

但是在使用过程中,发现404时,根本没办法进入到该异常处理。经查,是spring mvc 在异常时,没有抛出404异常。 处理办法如下:

711
来自专栏程序员的SOD蜜

DataSet的灵活,实体类的方便,DTO的效率:SOD框架的数据容器,打造最适合DDD的ORM框架

引言:DDD的困惑 最近,我看到园子里面有位朋友的一篇博客 《领域驱动设计系列(一):为何要领域驱动设计? 》文章中有下面一段话,对DDD使用产生的疑问: •没...

2939

扫描关注云+社区