##Instalando MongoDB no Mac via brew
brew install mongodb
Após a instalação vamos criar e dar permissão ao diretório utilizado pelo mongodb
sudo mkdir /data
sudo mkdir /data/db
sudo chmod 777 /data/db *777 só para fins didáticos no maravilhoso mundo de localhost ;)
dã! >.<
##Comando para exportar uma coleção
mongoexport --db nome_do_database --collection nome_da_colecao --out minha_colecao.json
- --db ou -d: especifica a database a ser usada/criada;
- --collection ou -c: especifica a coleção a ser usada/criada;
- --out: especifica qual arquivo receberá os dados.
##Comando para importar uma coleção
mongoimport --db database --collection collection --drop --file data.json
- --db ou -d: especifica a database a ser usada/criada;
- --collection ou -c: especifica a coleção a ser usada/criada;
- --drop: apaga a coleção antes de inserir os novos dados;
- --file: especifica o caminho do arquivo a ser importado.
db
use <nome_database>
show dbs
Para criar uma nova base de dados devemos selecionar a database e inserir algum registro nela
use be-mean-pokemons
db.pokemons.insert({"name":"Bulbasaur","description":"Bulbasaur can be seen napping in bright sunlight. There is a seed on its back. By soaking up the sun's rays, the seed grows progressively larger","attack":49, "defense":49, "height":0.7})
desta forma estaremos criando uma nova base chamada be-mean-pokemons e uma nova coleção chamada pokemons
db.collection.find()
db.collection.drop()
findOne() diferente de find() retorna um objeto comum
var query = {"name":"Bulbasaur"}
var p = db.pokemons.findOne(query)
p.description = "descrição alterada"
db.pokemons.save(p)
{ $and: [ { }, { } , ... , { } ] }
db.inventory.find( { $and: [ { price: { $ne: 1.99 } }, { price: { $exists: true } } ] } )
{ $or: [ { }, { }, ... , { } ] }
db.inventory.find( { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } )
{ field: { $not: { } } }
db.inventory.find( { price: { $not: { $gt: 1.99 } } } )
{ $nor: [ { }, { }, ... { } ] }
db.inventory.find( { $nor: [ { price: 1.99 }, { sale: true } ] } )
- save() Para utilizar save() precisamos buscar o documento antes de alterá-lo
- update()
- query
- modificação
- opções opcional
db.collection.update(query, mod, options)
{ $set: { campo : valor } }
var query = {"name":"Pikachu"}
var mod = {$set: {"attack":120}}
db.pokemons.update(query, mod)
{ $unset: { campo : bool } }
var query = {"name":/pikachu/i}
var mod = {$unset:{height:1}}
db.pokemons.update(query, mod)
*Caso o campo não exista, ele irá criar o campo e setar o valor.
Para decrementar, basta passar um valor negativo.*
{ $inc: { campo : valor } }
var query = {"name":/pikachu/i}
var mod = {$inc:{attack:100}}
db.pokemons.update(query, mod)
*caso o campo seja um Array existente. Caso não exista irá criar o campo novo, do tipo Array com o valor passado no $push.
Caso o campo exista e não for um Array, irá retornar um erro.*
{ $push : { campo : valor } }
var query = {"name":/pikachu/i}
var mod = {$push:{moves:'Thunder'}}
db.pokemons.update(query, mod)
{ $pushAll : { campo : [array_de_valores] } }
var attacks = ["Thunder wave", "Thunderbolt", "Quick attack"]
var query = {"name":/pikachu/i}
var mod = {$pushAll:{moves:attacks}}
db.pokemons.update(query, mod)
{ $pull : { campo : valor } }
var query = {"name":/pikachu/i}
var mod = {$pull: {moves: 'Quick attack'}}
db.pokemons.update(query, mod)
{ $pullAll : { campo : [array_de_valores] } }
var attacks = ['Thunder', 'Thunder wave']
var mod = {$pullAll: {moves: attacks}}
db.pokemons.update(query, mod)
O objeto options servirá para configurarmos alguns valores diferentes do padrão para o update.
{ upsert: boolean, multi: boolean, writeConcern: document }
O parâmetro upsert serve para caso o documento não seja encontrado pela query ele insira o objeto que está sendo passado como modificação.
Com esse operador você pode definir valores que serão adicionados apenas se ocorrer um upsert, ou seja, se o objeto for inserido pois não foi achado pela query.
var query = {"name":/PokemonInexistente/i}
var mod = { $set: {"active":true}, $setOnInsert: {"name":"PokemonInexistente", "attack":null, "defense":null, "height":null, "description":"Sem informações"} }
var options = {upsert:true}
db.pokemons.update(query, mod, options)
Por padrão o mongoDB não deixa você alterar multiplos documentos sem passar o campo como true
{ multi : true }
var query = {}
var mod = {$set: {moves: ['investida']}}
var options = {multi: true}
db.pokemons.update(query, mod, options)
O operador $in retorna o(s) documento(s) que possui(em) algum dos valores passados no [array_de_valores_informado].
{ campo : { $in : [array_de_valores] } }
var query = {moves: {$in: [/thunder/i]}}
db.pokemons.find(query)
{ campo : { $nin : [array_de_valores] } }
var query = {moves: {$nin: [/thunder/i]}}
db.pokemons.find(query)
{ campo : { $all : [ array_de_valores ] } } )
var query = {moves: {$all: ['Thunder', 'investida']}}
db.pokemons.find(query)
{ campo : { $ne : valor} }
var query = {type: {$ne: 'grama'}}
db.pokemons.find(query)
{ campo : { $not : valor} }
var query = { name : { $not : /pikachu/i } }
db.pokemons.find(query)
var query = {name: \squirtle\i}
db.pokemons.remove(query)
db.collection.count(query)
var query = {"borough" : "Bronx"}
db.restaurantes.count(query)
db.collection.distinct('valor')
db.restaurantes.distinct("borough")
db.collection.find(query).limit(int)
db.collection.find(query).limit(int).skip(int)
var qtd = 15
var query = {"cuisine":/american/i}
db.restaurantes.find(query).limit(qtd).skip(qtd * 0)
db.restaurantes.find(query).limit(qtd).skip(qtd * 1)
db.restaurantes.find(query).limit(qtd).skip(qtd * 2)
db.collection.group({ key, reduce, initial [, keyf] [, cond] [, finalize] })
key - o(s) campo(s) para agrupar
reduce - Uma função de agregação que opera sobre os documentos durante a operação de agrupamento.
initial - Inicializa uma ou mais variaveis que poderão ser usadas dentro de reduce
cond - Define uma condição para o agrupamento
db.pokemons.group(
{
initial : {total : 0},
cond : {defense : {$gt : 100}},
reduce : function(curr, result){
curr.types.forEach(function(type){
if(result[type]) {
result[type]++;
} else {
result[type] = 1;
}
result.total++;
});
}
})
db.pokemons.group(
{
initial : {total : 0, defense : 0, attack : 0},
reduce : function(curr, result){
result.total++;
result.defense += curr.defense;
result.attack += curr.attack;
},
finalize : function(result){
result.avg_defense = result.defense / result.total;
result.avg_attack = result.attack / result.total;
}
})
db.collection.aggregate(pipeline, options)
db.pokemons.aggregate({
$group : {
_id : {},
defense_avg : { $avg : '$defense' },
attack_avg : { $avg : '$attack' },
defense : { $sum : '$defense'},
attack : { $sum : '$attack'},
total : { $sum : 1 }
}
})
db.pokemons.aggregate([
{
$match : { 'types' : 'fire' }
},
{
$group : {
_id : {},
defense_avg : { $avg : '$defense' },
attack_avg : { $avg : '$attack' },
defense : { $sum : '$defense'},
attack : { $sum : '$attack'},
total : { $sum : 1 }
}
}
])