mongodb

I am in the process of putting my notes into web pages, please keep checking in later for more contents
home  sybase ase 
start and stop  mongo  top
top   prev   next  

mongod

mongod -datapath
mongod --dbpath /data/db
mongod.exe --dbpath "C:\mongodbwin32-x86_64-3.0.3\data"

mongod --dbpath db1 --port 27001 --smallfiles --oplogSize 50

mongod --dbpath "c://1" --replSet abc --port 27002
mongod --dbpath "c://2" --replSet abc --port 27002
mongod --dbpath "c://3" --replSet abc --port 27003
top
top   prev   next  

mongo

mongo
mongo --shell --port 27003 a.js
mongo --shell pcat homework2.js
mongo --shell localhost/performance performance.js
mongo --port 27001 --shell replication.js

top   prev   next  

db and collection

db
show dbs

show collections
use pcat

db.createCollection('logs', {capped: true, size: 1048576})

db.help()
db.stats()

db.COLLECTION_NAME
db.unicorns.count()
db.unicorns.help()

db.unicorns.find()


top   prev   next  

data dictionary

db.system.indexes.find()

top   prev   next  

create user

db.createUser(
{
user: "administrator",
pwd: "mypassword",
roles: [ "root" ]
}

db.shutdownServer()

mongod --dbpath "C:\mongodb-win32-x86_64-3.0.3\data" --auth

mongo -u administrator -p mypassword --authenticationDatabase admin

.. ....
use admin
db.auth('admin','mypassword')

top   prev   next  

pretty or print

db.javastuff.find().pretty()
top
top   prev   next  

jason

jason example
{
"name": "john",
"age": 25,
"address": {
          "city": "New York",
          "postalcode": 10021
          },
"phones": [
           {"phone":"212-555-1234","type":"home"},
           {"phone":"646-555-1234","type":"mobil"}
          ]
}

top   prev   next  

find

# regular expression
db.media.find ( { Title : /Matrix*/i } )
db.foo.find()

db.javastuff.find().pretty()

db.myCollection.find({lastname: "Meier"}, {firstname: true}).limit(10).skip(20)
SELECT firstname FROM myTable WHERE lastname = 'Meier' LIMIT 20,10

db.unicorns.find({}, {name: 1});

db.media.find ( { Released : {$lt : 1999 } }, { "Cast" : 0 } )

db.users.find({}).sort({"name":1})

db.media.find().sort( { Title: 1 })

db.media.find().limit( 10 )

db.media.find().skip( 20 )

db.media.find().sort ( { Title : -1 } ).limit ( 10 ).skip ( 20 )

By default, the _id field is always returned. 
We can explicitly exclude it by specifying {name:1, _id: 0}.

-- first 3
db.media.find({"Title" : "Matrix, The"}, {"Cast" : {$slice: 3}})

-- last 3
db.media.find({"Title" : "Matrix, The"}, {"Cast" : {$slice: -3}})

-- skip the first two items and limit the results to three
db.media.find({"Title" : "Matrix, The"}, {"Cast" : {$slice: [2,3] }})

-- skip to the last five items and limit the results to four
db.media.find({"Title" : "Matrix, The"}, {"Cast" : {$slice: [-5,4] }})

# $not (meta-operator)
db.media.find ( { Tracklist : { $not : { "$elemMatch" : { Title: "Smells Like Teen Spirit", "Track" : "1" } } } } )

db.media.find ( { "Type" : "DVD", "Released" : { $lt : 1995 } } )

db.media.find ( { "Type" : "DVD", $where: "this.Released < 1995" } )

db.media.find ("this.Released < 1995")

db.postings.find( { 'comments.flagged' : true } )
db.products.find({'brand':'ACME'})
db.products.find({"limits.voice":{$exists:1}}).count()
db.products.find({},{for:1})

db.products.find({type:"case"}).count()

db.products.find({'brand':'ACME'})
db.products.find({brand : "ACME"})

db.products.find()
db.products.count()

db.unicorns.find({_id: ObjectId("TheObjectId")})

db.users.find({}, {"name": 1,"age": 1})

# 0 do not display
By setting the projection values for the name and age to 0, the phone number is returned instead:
> db.users.find({}, {"name": 0,"age": 0})

db.users.find({ age: { $gt: 40 } })
db.users.find({ age: { $gte: 32 } })

db.unicorns.find({gender: 'm', weight: {$gt: 700}})
db.unicorns.find({gender: {$ne: 'f'}, weight: {$gte: 701}})
db.unicorns.find({vampires: {$exists: false}})
-- set
db.unicorns.find({loves: {$in:['apple','orange']}})
-- or
db.unicorns.find({gender: 'f',$or: [{loves: 'apple'},{weight: {$lt: 500}}]})

db.persons.insert(firstname: "Meier", loves: ['apple', 'orange', 'tomato']) 
db.persons.find($or: [{loves: 'apple'}, {loves: 'orange'}])

db.users.find( { $and: [ { "age": { $lt: 35 } }, { "name": "john" } ] } )
db.users.find( { $or: [ { "age": { $lt: 35 } }, { "name": "john" } ]} )

db.nodes.find_one({url:url})

- db.products.insert({"_id" : "ac9", "name" : "AC9 Phone", "brand" : "ACME","type" : "phone", "price" : 333, "warranty_years" : 0.25, "available" : true})

- db.products.findOne( { _id : ObjectId("507d95d5719dbef170f15c00") } )

- myobj = db.products.findOne( { _id : ObjectId("507d95d5719dbef170f15c00") } )

db.products.find({"limits.voice":{$exists:1}}).count()

db.policies.find( { status : { $ne : "expired" }, coverages : { $elemMatch : { type : "liability", rates : { $elemMatch : { rate : { $gte : 100 }, current : true } } } } } )

-- using 1 for ascending and -1 for descending

//heaviest unicorns first
db.unicorns.find().sort({weight: -1})

//by unicorn name then vampire kills:
db.unicorns.find().sort({name: 1, vampires: -1})

-- -------------------------------------

db.unicorns.find().sort({weight: -1}).limit(2).skip(1)

db.unicorns.count({vampires: {$gt: 50}})

db.unicorns.find({vampires: {$gt: 50}}).count()



top   prev   next  

insert

db.m102.insert([{"a":1},{"b":2},{"c":3
db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
db.unicorns.insert({name: 'Leto', gender: 'm', home: 'Arrakeen', worm: false})

db.employees.insert({_id: ObjectId(
    "4d85c7039ab0fd70a117d734"),
    name: 'Ghanima',
    family: {mother: 'Chani',
        father: 'Paul',
        brother: ObjectId(
    "4d85c7039ab0fd70a117d730")}})

db.users.insert({name: 'leto',
    email: 'leto@dune.gov',
    addresses: [{street: "229 W. 43rd St",
                city: "New York", state:"NY",zip:"10036"},
               {street: "555 University",
                city: "Palo Alto", state:"CA",zip:"94107"}]})

db.employees.find({'family.mother': 'Chani'})
> manga = ( { "Type" : "Manga", "Title" : "One Piece", "Volumes" : 612,"Read" : 520 } )
{
"Type" : "Manga",
"Title" : "One Piece",
"Volumes" : "612",
"Read" : "520"
}
> db.media.insert(manga)

top   prev   next  

remove or delete

db.myCollection.remove({firstname: "Hans"});
db.contacts.remove({'_id': 3})
db.numbers.remove({'contact_id': 3})

top   prev   next  

update

db.postings.update( { _id: . . . , voters:{$ne:.joe.} }, { $inc : {votes:1}, $push : {voters:.joe.} } );

db.unicorns.find({name: 'Roooooodles'})
db.unicorns.update({name: 'Roooooodles'},{weight: 590})

db.unicorns.update({name: 'Pilot'},{$inc: {vampires: -2}})

db.users.update({name: "owen"}, {$set: {"age": 39}})

-- set
db.unicorns.update({name: 'Aurora'},{$push: {loves: 'sugar'}})

db.cms.nodes.update(
{ ... node specification ... },
{ '$push': { 'metadata.comments': {
'posted': datetime.utcnow(),
'author': author_info,
'text': comment_text } } } )


db.unicorns.update({weight: 590}, {$set: {
    name: 'Roooooodles',
    dob: new Date(1979, 7, 18, 18, 44),
    loves: ['apple'],
    gender: 'm',
    vampires: 99}})

db.myCollection.update({id: 123}, {$set : {a : 4}})

db.categories.update(
{'_id':bop_id}, {'$set': { 'name': 'BeBop' } } )

db.categories.update(
{'ancestors._id': bop_id},
{'$set': { 'ancestors.$.name': 'BeBop' } },
multi=True)

db.media.update( { "Title" : "Matrix, The"}, {"Type" : "DVD", "Title" : "Matrix, The", "Released" : 1999, "Genre" : "Action"}, { upsert: true} )

-- multiple 
db.unicorns.update({},{$set: {vaccinated: true }});
db.unicorns.find({vaccinated: true});

db.nodes.update(
{},
{$set: { short_description: '' } },
false, // upsert
true // multi
);


top   prev   next  

upserts

-- Upserts
db.users.update({user: "frank"}, {age: 40},{ upsert: true} )

db.hits.update({page: 'unicorns'},{$inc: {hits: 1}}, {upsert:true});
db.hits.find();

db.hits.update({page: 'unicorns'},{$inc: {hits: 1}});
db.hits.find();

db.hits.update({page: 'unicorns'},{$inc: {hits: 1}}, {upsert:true});
db.hits.find();

top   prev   next  

save

# save command
db.media.save( { "Title" : "Matrix, The"}, {"Type" : "DVD", "Title" : "Matrix, The", "Released" : "1999", "Genre" : "Action"})

top   prev   next  

predicate

-- $unset $exists $group $sum $match
-- $exists
db.products.find({"limits.voice":{$exists:1}}).count()

The $unset operator lets you delete a given field:
> db.media.update ( {"Title": "Matrix, The"}, {$unset : { "Genre" : 1 } } )
> db.users.update({name: "owen"}, {$unset : { "age" : 1} })

top   prev   next  

count, group, aggreagate

db.vehicle.count({make:"FORD"});
# Group by make
db.vehicle.group(
           {key: { make:true},
            reduce: function(obj,prev) { prev.count++;},
            initial: { count: 0 }
            });
db.vehicle.group(
           {key: { make:true, model:true},
            reduce: function(obj,prev) { prev.count++;},
            initial: { count: 0 }
            });
db.elegans.aggregate([{$match:{N2:"T"}},{$group:{_id:"$N2",n:{$sum:1}}}]).result[0].n --- group by db.unicorns.aggregate([{$group:{_id:'$gender', total: {$sum:1}}}]) db.unicorns.aggregate([{$match: {weight:{$lt:600}}}, {$group: {_id:'$gender', total:{$sum:1}, avgVamp:{$avg:'$vampires'}}}, {$sort:{avgVamp:-1}} ]) db.unicorns.aggregate([{$unwind:'$loves'}, {$group: {_id:'$loves', total:{$sum:1}, unicorns:{$addToSet:'$name'}}}, {$sort:{total:-1}}, {$limit:1} ])

top   prev   next  

explain

db.unicorns.find().explain()
db.unicorns.find({name: 'Pilot'}).explain()

top   prev   next  

hints

db.media.find( { ISBN: " 978-1-4302-5821-6"} ) . hint ( { ISBN: 1 } )

top   prev   next  

Profiling and stats

db.setProfilingLevel(2);
db.unicorns.find({weight: {$gt: 600}});
db.system.profile.find()

top   prev   next  

index

db.sensor_readings.ensureIndex({tstamp:1, active:1})
db.products.ensureIndex({for:1});

db.products.ensureIndex({for:1});

db.sensor_readings.ensureIndex({tstamp:1, active:1})

db.products.ensureIndex({for:1})

db.cart.ensure_index([('status', 1), ('last_modified', 1)])

// where "name" is the field name
db.unicorns.ensureIndex({name: 1});

db.unicorns.dropIndex({name: 1});

db.unicorns.ensureIndex({name: 1}, {unique: true});

// Ensure descending index
db.media.ensureIndex( { Title :-1 } )

-- 1 for ascending, -1 for descending
db.unicorns.ensureIndex({name: 1, vampires: -1});

-- -----
# the first command.s background parameter ensures that the indexing is done on the background:
> db.media.ensureIndex({ISBN: 1}, {background: true});
> db.media.find( { ISBN: " 978-1-4302-5821-6"} ) . hint ( { ISBN: 1 } )


top   prev   next  

currentop and killop

db.currentOp() check current running operation 

db.killOp(?) kill the running operation
? - will be operation id
{opid}

top   prev   next  

shell and javascript

var c = db.products.find({}).sort({name:1}); c.forEach( function(doc){ print(doc.name) } );
var c = db.products.find({},{name:1,_id:0}).sort({name:1}); while( c.hasNext() ) print( c.next().name); 
var temp = db.products.findOne({_id:ObjectId("507d95d5719dbef170f15c00")})

temp.term_years = 3
db.products.update({_id:temp._id},temp)

temp.limits.sms.over_rate = 0.01
db.products.update({_id:temp._id},temp)
def deactivate_campaign(campaign_id):
db.ad.zone.update(
{ 'ads.campaign_id': campaign_id },
{' $pull': { 'ads', { 'campaign_id': campaign_id } } },
multi=True)
f = function() { return this.Released < 1995 }
db.media.find(f)
def get_node_by_url(url):
node = db.nodes.find_one({'url': url})
node.setdefault('short_description', '')
return node

-- -------------------
def get_node_by_url(url):
node = db.nodes.find_one({'url': url})
return node
-- -------------------

def add_short_descriptions():
node_ids_to_migrate = db.nodes.find(
{'short_description': {'$exists':False}}).limit(100)
db.nodes.update(
{ '_id': {'$in': node_ids_to_migrate } },
{ '$set': { 'short_description': '' } },
multi=True)

-- -----------------------

# journal is true
db.events.insert(event, j=True)

-- -----------------------

db.events.insert(event, w=2)
db.events.insert(event, j=True, w=2)

-- ------------------------

db.command('collstats', 'events')['indexSizes']

-- -------------------------

q_events = db.events.find('time':
... { '$gte':datetime(2000,10,10),'$lt':datetime(2000,10,11)})

-- --------------------------

# TTL collections, time to live

db.events.ensureIndex('time', expireAfterSeconds=3600)


top   prev   next  

M102

download 

video 

top   prev   next  

Replication

db.isMaster().maxBsonObjectSize

-- Checking the Replica Set Status
rs.status()

using rs.stepDown() (perhaps also rs.freeze())
rs.slaveOk()

top   prev   next  

shard or partition

mongodb --shardsvr --dbpath db/s1 --port 27501
mongodb --shardsvr --dbpath db/s2 --port 27601

mongo localhost:27019/config
db.shards.find()

mongos --configdb localhost:27019

# configuration server
mongo localhost:27019/config
configsvr> 
configsvr> db
config
configsvr> db.chunks.find().sort({_id:1}).next().lastmodEpoch.getTimestamp().toUTCString().substr(20,6)

top   prev   next  

mongoexport and mongoimport

mongoexport --db learn --collection unicorns
mongoexport --db learn --collection unicorns --csv --fields name,weight,vampires
mongoexport --db sampledb --collection users --limit 100 --out export.json

mongoimport -d pcat -c products --type json --file C:\products.json
mongoimport -d pcat -c products --drop products.json

top   prev   next  

mongorestore and monodump

mongodump --db test --collection users
mongodump --db learn --out backup

mongorestore --db learn --collection unicorns backup/learn/unicorns.bson
mongorestore --collection users --db sampledb dump/sampledb/users.bson
mongorestore --oplogReplay --verbose --host localhost --port 27501 --dbpath db/s1 --drop s1
mongorestore --oplogReplay --verbose --host localhost --port 27601 --dbpath db/s2 --drop s2

top   prev   next  

bsondump

the bsondump utility on that file
bsondump test.foo.2013-03-11T10-25-48.0.bson 

top   prev   next  

GridFS

-- GridFS
mongofiles -d images put mastersword.jpg

mongofiles list

mongofiles put /tmp/dictionary

mongofiles search hello

mongofiles delete /tmp/hello_world

mongofiles get /tmp/dictionary

top   prev   next  

java

-classpath mongo-java-driver-2.13.0.jar YourApplication.java

curl https://stream.twitter.com/1/statuses/sample.json -umongodb:secret| mongoimport -c tweets

mongostat

mongosniff: viewing operations sent to the database.

bsondump and monfiles



db.users.save({username: "jones"})
db.users.count()
db.users.find()
db.users.find({username: "jones"})

db.users.update( {username: "smith"},
{ $set: {favorites:
{
cities: ["Chicago", "Cheyenne"],
movies: ["Casablanca", "The Sting"]
}
}
})

db.users.update( {username: "jones"},
{"$set": {favorites:
{
movies: ["Casablanca", "Rocky"]
}
}
})

db.users.update( {"favorites.movies": "Casablanca"},
{$addToSet: {"favorites.movies": "The Maltese Falcon"} },
false,
true )

db.users.find({"favorites.movies": "Casablanca"})


# remove a collection
# that the remove() operation doesn.t actually delete the collection; it merely removes documents from a collection
db.foo.remove()  

# remove a collection
db.users.drop()

-- --------
for(i=0; i<200000; i++) {
db.numbers.save({num: i});
}
-- --------

> it --> like more

-- --------
db.foo.get --> will list function start with get

-- --------
db.stats()
db.runCommand( {dbstats: 1} )

-- ---------
# dict
db.system.namespaces.find();

-- ---------

db.mycollection.stats() 
db.runCommand( {collstats: 'numbers'} )
db.$cmd.findOne( {collstats: 'numbers'} );

-- ---------
getIndexes() --> db.numbers.getIndexes()

-- --------

db.numbers.find({num: {"$gt": 199995 }}).explain()  --> display as jason format

-- --------

db.runCommand
function (obj) {
  if (typeof obj == "string") {
    var n = {};
    n[obj] = 1;
    obj = n;
  }
  return this.getCollection("$cmd").findOne(obj);
}
-- ---------

db.numbers.save({n: 5});
db.numbers.save({ n: NumberLong(5) });


> db.numbers.save
function (obj) {
if (obj == null || typeof obj == "undefined") {
throw "can't save a null";
}

if (typeof obj._id == "undefined") {
obj._id = new ObjectId;
return this.insert(obj);
} else {
return this.update({_id:obj._id}, obj, true);
}

}

-- ----------

db.createCollection("users")

db.createCollection("users", {size: 20000})

db.createCollection("users.actions",{capped: true, size: 1024}) 

db.products.renameCollection("store_products")

-- ----------

# use the $natural sort operator
db.user.actions.find().sort({"$natural": -1});

-- ----------
db.users.find({age: {$gte: 0}, age: {$lte: 30})
db.users.find({age: {$gte: 0, $lte: 30})

# last names not beginning with B
db.users.find(last_name: {$not: /^B/} }

db.users.find({addresses: {$elemMatch: {name: 'home', state: 'NY'}}})
-- ----------

# javascript
db.reviews.find({$where: "function() { return this.helpful_votes > 3; }"}})
db.reviews.find({$where: "this.helpful_votes > 3"}})

db.reviews.find({user_id: ObjectId("4c4b1476238d3b4dd5000001"),$where: "(this.rating * .92) > 3"})

@users.find({$where => "this.#{attribute} == #{value}"})

# find best or worst, case insensitive
db.reviews.find({user_id: ObjectId("4c4b1476238d3b4dd5000001"), text: /best|worst/i })

# using mongo shell
db.reviews.find({user_id: ObjectId("4c4b1476238d3b4dd5000001"), text: {$regex: "best|worst", $options: "i" })

-- ---------

# Map or Reduce:

# step 1): map
map = function() {
var shipping_month = this.purchase_date.getMonth() + '-' + this.purchase_data.getFullYear();
var items = 0;

this.line_items.forEach(function(item) {
  tmpItems += item.quantity;
  });
emit(shipping_month, {order_total: this.sub_total, items_total: 0});
}


# step 2): reduce
reduce = function(key, values) {
var tmpTotal = 0;
var tmpItems = 0;
  tmpTotal += doc.order_total;
  tmpItems += doc.items_total;
return ( {total: tmpTotal, items: tmpItems} );
}

# step 3: map-reduce
filter = {purchase_date: {$gte: new Date(2010, 0, 1)}}
db.orders.mapReduce(map, reduce, {query: filter, out: 'totals'})

# step 4: output
> db.totals.find()

-- -----------

# sort: 1 order, -1 reverse order
db.reviews.find({}).sort({helpful_votes: -1}).limit(1)
db.reviews.find({}).sort({helpful_votes: 1}).limit(1)

-- ------------
db.values.reIndex();

# javascript, insert
spec = {ns: "green.users", key: {'addresses.zip': 1}, name: 'zip'}
db.system.indexes.insert(spec, true)

db.users.ensureIndex({zip: 1})
db.runCommand({deleteIndexes: "users", index: "zip"})
db.users.dropIndex("zip_1")

db.system.indexes.find()
db.users.getIndexSpecs()
db.values.getIndexKeys()

db.values.ensureIndex({open: 1, close: 1})
db.values.ensureIndex({open: 1, close: 1}, {background: true})

db.values.dropIndex("stock_symbol_1_close_1")

-- ------------

# distinct tags
db.products.distinct("tags")

-- --------------

# find and modify
db.orders.findAndModify({
query: {user_id: ObjectId("4c4b1476238d3b4dd5000001"),
state: "AUTHORIZING" },
update: {"$set":
{"state": "PRE-SHIPPING"},
"authorization": auth}
})

-- --------------

db.users.ensureIndex({username: 1}, {unique: true})
db.users.ensureIndex({username: 1}, {unique: true, dropDups: true})

db.products.ensureIndex({sku: 1}, {unique: true, sparse: true})
db.reviews.ensureIndex({user_id: 1}, {sparse: true})

db.products.find({category_ids: null})

-- -------------

mongorestore -d stocks -c values dump/stocks

-- -------------

http://www.tutorialspoint.com/mongodb/mongodb_data_modeling.htm

http://www.tutorialspoint.com/tutorialslibrary.htm

http://cs.indstate.edu/CS473/sqlite_tutorial.pdf
https://www.sqlite.org/quickstart.html
http://www.tutorialspoint.com/sqlite/
http://www.techonthenet.com/sqlite/

https://www.sqlite.org/faq.html
https://www.sqlite.org/doclist.html
top