Olá a todos, nesse tópico vou mostrar como ter um controle dos dados de uma collection em um banco de dados NoSQL, nesse post sera usado o MongoDb como exemplo.
No NoSQL pode se ter diferentes Objetos para a mesma Collection.
Exemple:
Na Collection teste posso ter os seguintes Objetos:
{ _id: 1, nome: 'Rafael', idade: 22 }, { _id: 2, nome: 'Fulano', idade: '50', nascimento: 'Jul 14, 1992', sexo: 'M' }
Isso pode dar muita dor de cabeça na hora de tratar os dados na aplicação, e pode comprometer o desempenho de sua aplicação caso trate a inserção dos dados no código.
Uma maneira simples é criar uma função em JavaScript para inserir todos os dados nas Collections, assim todo o processamento ficara no banco, tornando sua aplicação mais rápida e evitando códigos gigantes.
O primeiro passo é criar uma Collection que ficara salva o modelo do seu banco de dados.
var document = { Namecollection: 'pessoa', nome: 'string', idade: 'int' }; db.collection.save(document);
Agora vamos criar nossa função no banco, que ira inserir os dados no banco.
db.system.js.insert( { _id: 'InsertFunction', value: function(listObj) { var objId = ObjectId(); var data = '{ _id: ' + "ObjectId(objId.valueOf())"; var valorColumn; var myCursor = db.getCollection('collection').find({ Namecollection: listObj["Namecollection"] }); var myDocument = myCursor.hasNext() ? myCursor.next() : null; if(!myDocument) throw { name : "FunctionError", message : "Collection não existe!" }; for(var doc in myDocument) { if (doc != "Namecollection" && doc != "_id") { switch(myDocument[doc]) { case('string'): valorColumn = listObj[doc] ? '\"' + listObj[doc] + '\"' : null; break; case('int'): valorColumn = parseInt(listObj[doc]) ? parseInt(listObj[doc]) : 0; break; default: valorColumn = listObj[doc] ? '\"' + listObj[doc] + '\"' : null; break; } data = data + ', ' + doc + ': ' + valorColumn; } } var document = eval('(' + data + '}' + ')'); db.getCollection(listObj["Namecollection"]).save( document ); } });
Agora é so testar so testar nossa function.
db.loadServerScripts(); var document = { Namecollection: 'pessoa', nome: 'Siclano', idade: '50', nascimento: 'Jul 14, 1992', sexo: 'M' }; InsertFunction(document); db.pessoa.find();
Nesse exemplo nossa Function ira ignorar os campos, nascimento e sexo, que não existem no nosso modelo da Collection “collection”, e também irá transformar o valor de idade para que int, como está definido na nossa collection. Portanto nosso resultado da pesquisa sera o seguinte:
{ _id: ObjectId("553a86fcc6364b83e5d99b81"), nome: "Siclano", idade: 50 }
Para ver o código completo acesse meu repositório no GitHub https://github.com/rafaellincoln/Control-For-Mongodb
Se gostou compartilhe esse post e colabore com o projeto no GitHub.
Faça sugestões:
Através do meu Facebook: https://www.facebook.com/Rafael.Lincoln13
Ou através do meu Email: rafaellincolnpereira@gmail.com