Tuesday, November 22, 2016

Bulk insertOne

try {
   db.products.insertOne( { item: "card", qty: 15 } );
} catch (e) {
   print (e);
};
try {
   db.products.insertOne( { _id: 210, item: "box", qty: 20 } );
} catch (e) {
   print (e);
}
try {
   db.products.insertOne( { _id: 110, "item" : "packing peanuts", "qty" : 200 } );
} catch (e) {
   print (e);
}
{ "acknowledged" : true, "insertedId" : 110 }
>
\
try {
   db.characters.bulkWrite(
      [
         { insertOne :
            {
               "document" :
               {
                  "_id" : 140, "char" : "Mani", "class" : "barbarian", "lvl" : 4
               }
            }
         },
         { insertOne :
            {
               "document" :
               {
                  "_id" : 150, "char" : "Sana", "class" : "fighter", "lvl" : 3
               }
            }
         },
         { updateOne :
            {
               "filter" : { "_id" : 15 },
               "update" : { $set : { "status" : "Critical Injury" } }
            }
         },
         { deleteOne :
            { "filter" : { "char" : "Taeln"} }
         },
         { replaceOne :
            {
               "filter" : { "char" : "Dithras" },
               "replacement" : { "char" : "Tanys", "class" : "oracle", "lvl" : 4 }
            }
         }
      ]
   );
} catch (e) {
   print(e);
}
{
        "acknowledged" : true,
        "deletedCount" : 1,
        "insertedCount" : 2,
        "matchedCount" : 2,
        "upsertedCount" : 0,
        "insertedIds" : {
                "0" : 140,
                "1" : 150
        },
        "upsertedIds" : {

        }
}

With unordered inserts, if an error occurs during an insert of one of the documents, MongoDB continues to insert the remaining documents in the array.
db.products.insert(
   [
     { _id: 200, item: "lamp", qty: 50, type: "desk" },
     { _id: 200, item: "lamp", qty: 20, type: "floor" },
     { _id: 220, item: "bulk", qty: 100 }
   ],
   { ordered: false }
)

Wednesday, November 16, 2016

Features of MongoDB


Features of MongoDB

  • Indexing of any field and any number of fields is supported
  • Ad hoc queries support - Search by field, range, regular expression etc
  • Replication - Master/Slave (Slave can only read-only)
  • Duplication of Data across multiple servers for data redundancy
  • Load balancing
  • Scalability- Add new machine into running db
  • Capped collections - Behaves like a circular queue
  • Special File Storage - GridFS
  • Aggregation - MapReduce used - Big computation split into small units
  • Java queries
  • Special support for Spacial data (location) - Longitude/Latitude info


insertOne and insertMany methods

db.users.insertOne(
{
name:"Mani",
age:37,
status:"P"
}
)

db.users.insertMany(
[
{name:"Raja",age:34,status:"D"},
{name:"Kaja",age:24,status:"A"},
{name:"Roja",age:44,status:"F"}
]
)

  • Different between insert and InsertOne/Many Method is
  • Insert One/Many returns _id in the output but Insert doesn't do so, however it's internally updated _id value for normal inserts also.

_id field - Unique identifier of any record inserted into collection

Data accepted by _id field
====================
db.users.save({_id:1})
db.users.save({_id:3.14})
db.users.save({_id:"Hellow World"})
db.users.save({_id:ISODate()})
db.users.save({_id:{A:'x', b:1, c:3.14}})


Apart from an Array value,  you can pass any value to an _id field

Tuesday, November 15, 2016

Aggregate Functions

(1) Sum

db.users.aggregate({
$group : {
_id : "$eyeColor",
total : {$sum : 1}
}
})



(2)
db.users.aggregate({
$group : {
_id : "$gender",
total : {$sum : 1}
}
})


(3) Avg

db.users.aggregate({
$group : {
_id : "$gender",
avgAge : {$avg : "$age"}
}
})

(4) max/min
db.users.aggregate({
$group : {
_id : "$gender",
Richest : {$max : "$balance"}
}
})

Indexing

Indexing
========

Sample query ->

db.users.find({"age":{$lt:23}})


Execution plan ->

db.users.find({"age":{$lt:23}}).explain("executionStats")

Create Index on Age ->

db.users.ensureIndex({"age":1})


List index ->

db.users.getIndexes()

Drop index ->

db.users.dropIndex({"age":1})