Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

$where (operador de predicado da query)

$where

Utilize o operador para transmitir uma string contendo uma expressão JavaScript $where ou uma função JavaScript completa para o sistema de query. fornece maior flexibilidade, mas exige que o banco $where de dados processe a expressão ou função JavaScript para cada documento na collection. Consulte o documento na expressão ou função JavaScript usando this objou.

Você pode utilizar o $where para implantações hospedadas nos seguintes ambientes:

  • MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
  • MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB

  • MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB

O operador tem o seguinte $where formato:

{ $where: <string|JavaScript Code> }

Observação

$where não é mais compatível com o código JavaScript dos tipos de BSON obsoleto com escopo (tipo de 15 BSON). O operador suporta apenas $where a string dos tipos de BSON (tipo de 2 BSON) ou JavaScript dos tipos de BSON (tipo 13 de BSON). O uso do JavaScript do tipo de BSON com escopo para ficou obsoleto a partir do $where MongoDB...421

Observação

Alternativas de aggregation preferidas

O operador $expr permite o uso de expressões de agregação dentro da linguagem de query. O $function e o $accumulator permitem que os usuários definam expressões de agregação personalizadas em JavaScript se os operadores de pipeline fornecidos não atenderem às necessidades do seu aplicativo.

Considerando os operadores de aggregation disponíveis:

  • O uso de$exprcom operadores de agregação que não usam JavaScript (ou seja, operadores não$functione não$accumulator) é mais rápido do que$whereporque não executa JavaScript e deve ser preferido, se possível.

  • No entanto, se você precisar criar expressões personalizadas, é$function preferível $where a.

map-reduce operations As $where expressões de operador e não podem acessar determinadas funções ou propriedades globais,db como, que estão disponíveis mongosh em.

As seguintes funções e propriedades do JavaScript estão disponíveis para map-reduce operations $where as expressões de operador e:

Propriedades disponíveis
Funções disponíveis

args
MaxKey
MinKey

assert()
BinData()
DBPointer()
DBRef()
doassert()
emit()
gc()
HexData()
hex_md5()
isNumber()
isObject()
ISODate()
isString()

Map()
MD5()
NumberInt()
NumberLong()
ObjectId()
print()
printjson()
printjsononeline()
sleep()
Timestamp()
tojson()
tojsononeline()
tojsonObject()
UUID()
version()

Aplique apenas o $where operador de query a documentos de nível superior. O $where operador de query não funcionará dentro de um documento aninhado, por exemplo, em uma $elemMatch query.

  • Não use variáveis globais.

  • $where avalia JavaScript e não pode aproveitar os índices. Portanto, o desempenho da query melhora quando você a expressa usando os operadores padrão do MongoDB (por$gt exemplo,, $in).

  • Em geral, você deve usar$wheresomente quando não puder expressar sua query usando outro operador. Se você precisar usar$where, tente incluir pelo menos um outro operador de query padrão para filtrar o conjunto de resultados. O uso apenas de$whererequer uma verificação de collection.

O uso de$where declarações de query normais não fornece as seguintes vantagens de desempenho:

  • O MongoDB avaliará$where componentes que não sejam de query antes das $where declarações. Se as declarações que não$where sejam não corresponderem a nenhum documento, o MongoDB não realizará nenhuma avaliação de $where query usando.

  • As$where declarações de query que não sejam podem usar um índice.

Para usar $where (ou, ou), você deve ter o script do lado do servidor habilitado $function $accumulator mapReduce(padrão).

No entanto, se você não usar essas operações, desabilite os scripts do lado do servidor:

Consulte também ➤ Executar o MongoDB com opções de configuração seguras.

O MongoDB atualiza o 6.0 mecanismo JavaScript interno usado para expressões JavaScript,, e do lado$accumulator do$function $where servidor e do MozJS- para60 o91 MozJS-. Várias funções de array e string de caracteres não padrão obsoletas que existiam no MozJS-60 são removidas no91 MozJS-.

Considere os seguintes documentos na collection players:

db.players.insertMany([
{ _id: 12378, name: "Steve", username: "steveisawesome", first_login: "2017-01-01" },
{ _id: 2, name: "Anya", username: "anya", first_login: "2001-02-02" }
])

O exemplo a seguir usa e $where a hex_md5() função JavaScript para comparar o valor do name campo com um5 hash MD e retorna qualquer documento correspondente.

db.players.find( { $where: function() {
return (hex_md5(this.name) == "9b53e667f30cd329dca1ec9e6a83e994")
} } );

A operação retorna o seguinte resultado:

{
"_id" : 2,
"name" : "Anya",
"username" : "anya",
"first_login" : "2001-02-02"
}

Como alternativa, o exemplo anterior pode ser reescrito utilizando $expr e $function. Você pode definir uma expressão de agregação personalizada em JavaScript com o operador de agregação $function. Para acessar $function e outros operadores de agregação em db.collection.find(), use com $expr:

db.players.find( {$expr: { $function: {
body: function(name) { return hex_md5(name) == "9b53e667f30cd329dca1ec9e6a83e994"; },
args: [ "$name" ],
lang: "js"
} } } )

Se você precisar criar expressões customizadas, $function prefere-se $where a.