Menu Docs
Página inicial do Docs
/
Manual do MongoDB

Armazenar uma função JavaScript no servidor

Nesta página

  • Antes de começar
  • Sobre esta tarefa
  • Passos

Importante

A partir do MongoDB 8.0, o JavaScript do lado do servidor está obsoleto. A funcionalidade system.js pode não funcionar com todos os recursos.

Há uma collection de sistema especial chamada system.js que pode armazenar funções JavaScript para reutilização.

Essa tarefa usa o shell mongo legado para carregar funções do lado do servidor a partir da coleção system.js. Essa versão do shell não tem mais suporte. Para uma solução alternativa no MongoDB Shell, consulte Gravar scripts.

Considere as seguintes recomendações ao usar system.js:

  • Não armazene lógica de aplicativo no banco de dados.

  • Existem limitações de desempenho para executar JavaScript dentro do MongoDB.

  • O código do aplicativo é mais eficaz quando compartilha o controle de versão com o aplicativo.

Para armazenar uma função, insira a função na coleção system.js, como nestes exemplos:

1
db.test_numbers.insertMany([
{ value: 1 },
{ value: 2 },
{ value: 3 },
{ value: 4 },
{ value: 5 },
{ value: 6 }
])
2

Para armazenar funções JavaScript no banco de dados, insira um documento com estes campos:

  • O campo _id mantém o nome da função e é exclusivo por banco de dados.

  • O campo value mantém a definição de função.

O exemplo a seguir cria uma função echo na coleção system.js:

db.system.js.insertOne(
{
_id: "echo",
value : function(x) { return x; }
}
)

O exemplo a seguir cria uma função isEven na coleção system.js:

db.system.js.insertOne(
{
_id: "isEven",
value: function (num) {
return num % 2 === 0;
}
}
)

Estas funções, salvas como Tipo JSON, estão disponíveis para utilizar a partir de qualquer contexto JavaScript, como mapReduce e $where.

Observação

As funções salvas como o tipo BSON preterido JavaScript (com escopo) não podem ser usadas por mapReduce e $where.

3
db.loadServerScripts()
4
  1. O exemplo de código a seguir executa a função echo armazenada em system.js:

    echo("test")
    test
  2. O exemplo de código a seguir executa a função isEven armazenada em system.js no operador $where na coleção test_numbers:

    db.test_numbers.find({
    $where: function () {
    return isEven(this.value);
    }
    })
    { "_id" : ObjectId("668d7be41b55bec1bf191499"), "value" : 2 }
    { "_id" : ObjectId("668d7be41b55bec1bf19149b"), "value" : 4 }
    { "_id" : ObjectId("668d7be41b55bec1bf19149d"), "value" : 6 }

Próximo

O que é o MongoDB?