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

Alterações de compatibilidade com o legado shell mongo shell

Nesta página

  • Métodos obsoletos
  • Ler comportamento de preferência
  • Comportamento de preferência de escrita
  • Métodos e atributos do ObjectId
  • Numeric Values
  • Valores indefinidos
  • Comportamento de cotação de objetos
  • Limitações nas chamadas de banco de dados
  • Exceções de comando
  • Configuração de shell
  • Tipos de dados
  • Métodos
  • Gravações repetíveis
  • Saída legada
  • Trechos de código

Esta página descreve as diferenças entre mongosh e o shell mongo legado . Além das alternativas listadas aqui, você pode usar o mongocompat trecho para acessar APIs de shell do legado mongo . Os trechos são um recurso experimental, para obter mais informações, consulte Trechos.

snippet install mongocompat

Os seguintes métodos de shell são preteridos no mongosh. Em vez disso, utilize os métodos listados na coluna Alternative Resources.

Método preterido
Recursos alternativos

db.collection.copyTo()

Estágio de agregação: $out

db.collection.count()

db.collection.insert()

db.collection.remove()

db.collection.save()

db.collection.update()

DBQuery.shellBatchSize

Mongo.getSecondaryOk

Mongo.isCausalConsistency

Mongo.setSecondaryOk

rs.secondaryOk

Ao usar o mongo shell legado para se conectar diretamente ao nó secundário do conjunto de réplicas, você deve executar mongo.setReadPref() para habilitar leituras secundárias.

Ao usar mongosh para se conectar diretamente a um nó secundário do conjunto de réplicas, você pode ler a partir desse nó se especificar uma preferência de leitura de:

Para especificar uma preferência de leitura, você pode usar:

Ao usar mongosh para se conectar diretamente a um membro do conjunto de réplicas do conjunto de réplicas, se a preferência de leitura estiver definida como primaryPreferred, secondary ou , secondaryPreferred não será necessário rs.secondaryOk().

Os seguintes métodos auxiliares de show sempre usam uma preferência de leitura de primaryPreferred, mesmo quando uma preferência de leitura diferente tiver sido especificada para a operação:

  • show dbs

  • show databases

  • show collections

  • show tables

No shell legado mongo, estas operações utilizam a preferência de leitura especificada.

Gravações repetíveis são habilitadas por padrão no mongosh. As gravações repetíveis foram desabilitadas por padrão no shell legado mongo. Para desativar gravações repetíveis, use --retryWrites=false.

Estes métodos ObjectId() funcionam de forma diferente no mongosh e no mongo shell legado .

Método ou Atributo
mongo Comportamento
mongosh Comportamento

ObjectId.str

Returns a hexadecimal string:
6419ccfce40afaf9317567b7
Undefined
(Not available)

ObjectId.valueOf()

Returns the value of ObjectId.str:
6419ccfce40afaf9317567b7
Returns a formatted string:
ObjectId("6419ccfce40afaf9317567b7")

ObjectId.toString()

Returns a formatted string:
ObjectId("6419ccfce40afaf9317567b7")
Returns a hexadecimal formatted string:
6419ccfce40afaf9317567b7

O mongo shell legado armazenou valores numéricos como doubles por padrão. Em mongosh, os números são armazenados como inteiros de 32 bits, Int32 ou então como Double se o valor não puder ser armazenado como Int32.

MongoDB Shell continua suportando os tipos numéricos que são suportados no shell mongo . No entanto, os tipos preferidos foram atualizados para melhor alinhamento com os drivers MongoDB . Consulte Tipos de dados mongosh para obter mais informações.

Os tipos preferidos para variáveis numéricas são diferentes no MongoDB Shell do que os tipos sugeridos no shell legado mongo. Os tipos em mongosh se alinham melhor com os tipos usados pelos drivers do MongoDB.

mongo type
mongosh type

NumberInt

Int32

NumberLong

Long

NumberDecimal

Decimal128

Aviso

Os tipos de dados podem ser armazenados de forma inconsistente se você se conectar à mesma coleção usando o mongosh e o shell legado mongo.

Dica

Veja também:

Para obter mais informações sobre os tipos de gerenciamento, veja a visão geral de validação de esquema.

O tipo indefinido de BSON está obsoleto. Se você tentar inserir um documento com o tipo JS indefinido em mongosh, seu sistema substituirá o valor indefinido em seu documento pelo valor nulo BSON. Não há nenhuma maneira suportada de inserir valores indefinidos em seu banco de dados de dados usando mongosh.

Por exemplo, considere executar o seguinte código para inserir um documento no mongosh:

db.people.insertOne( { name : "Sally", age : undefined } )

Quando você executa este código no mongosh, o shell insere o seguinte documento:

{ name : "Sally", age : null }

mongosh representa qualquer valor indefinido de BSON armazenado usando outras ferramentas, como o Go Driver ou o mongo shell legado , como nulo.

mongosh não coloca aspas nas chaves do objeto em sua saída e coloca aspas simples nos valores. Para reproduzir a saída do shell legado mongo, que envolve as chaves e os valores de string entre aspas duplas, use mongosh --eval com EJSON.stringify().

Por exemplo, o seguinte comando gera os itens na collection sales no banco de dados do test com aspas duplas e recuo:

mongosh --eval "EJSON.stringify(db.sales.findOne().toArray(), null, 2)"

A saída parece o seguinte:

{
"_id": {
"$oid": "64da90c1175f5091debcab26"
},
"custId": 345,
"purchaseDate": {
"$date": "2023-07-04T00:00:00Z"
},
"quantity": 4,
"cost": {
"$numberDecimal": "100.60"
}
}

Os resultados das queries do banco de dados não podem ser passados dentro dos seguintes contextos:

  • Funções do construtor de classes

  • Funções de gerador não assíncronas

  • Retornos de chamada para .sort() em uma matriz

  • Setters de JavaScript em classes

Para acessar os resultados de chamadas de banco de dados, use funções assíncronas, funções assíncronas de gerador ou .map().

Os seguintes construtores não funcionam:

// This code will fail
class FindResults {
constructor() {
this.value = db.students.find();
}
}
// This code will fail
function listEntries() { return db.students.find(); }
class FindResults {
constructor() {
this.value = listEntries();
}
}

Em vez disso, use uma função async :

class FindResults {
constructor() {
this.value = ( async() => {
return db.students.find();
} )();
}
}

Observação

Você também pode criar um método que executa uma operação do banco de dados dentro de uma classe como uma alternativa para trabalhar com JavaScript assíncrono.

class FindResults {
constructor() { }
init() { this.value = db.students.find(); }
}

Para usar essa classe, primeiro construa uma instância de classe e depois chame o método .init().

As seguintes funções do gerador não funcionam:

// This code will fail
function* FindResults() {
yield db.students.findOne();
}
// This code will fail
function listEntries() { return db.students.findOne(); }
function* findResults() {
yield listEntries();
}

Use um async generator function em vez disso:

function listEntries() { return db.students.findOne(); }
async function* findResults() {
yield listEntries();
}

A seguinte classificação de array não funciona:

// This code will fail
db.getCollectionNames().sort( ( collectionOne, collectionTwo ) => {
return db[ collectionOne ].estimatedDocumentCount() - db[ collectionOne ].estimatedDocumentCount() )
} );

Em vez disso, use .map().

db.getCollectionNames().map( collectionName => {
return { collectionName, size: db[ collectionName ].estimatedDocumentCount() };
} ).sort( ( collectionOne, collectionTwo ) => {
return collectionOne.size - collectionTwo.size;
} ).map( collection => collection.collectionName);

Essa abordagem para a classificação de array geralmente é mais eficiente do que o código equivalente sem suporte.

O seguinte configurador JavaScript não funciona:

// This code will fail
class TestClass {
value = 1;
get property() {
return this.value;
}
// does not work:
set property(value) {
this.value = db.test.findOne({ value });
}
}

Para comandos cuja saída inclui { ok: 0 }, mongosh retorna uma exceção consistente e omite a saída bruta do servidor. O shell mongo legado retorna uma saída que varia para cada comando.

Para obter detalhes, consulte Executar comandos.

O shell mongo legado usa um arquivo de configuração chamado .mongorc.js.

Se mongosh encontrar .mongorc.js na inicialização, mas não encontrar .mongoshrc.js, mongosh não carrega o arquivo .mongorc.js legado e informa que você deve renomear .mongorc.js para .mongoshrc.js.

Para obter detalhes, consulte .mongoshrc Arquivo de Configuração.

O MongoDB armazena dados usando BSON, que aceita tipos de dados adicionais que não estão disponíveis em JSON. O shell mongosh tem melhor suporte a tipos de dados para drivers do que o shell mongo legado.

Para detalhes, consulte Tipos de dados.

O shell mongo legado não pode acessar um nome de arquivo ou diretório de script no método load() .

Para obter detalhes, consulte load().

Por padrão, as gravações que podem ser repetidas são:

  • habilitado em mongosh

  • desabilitados no shell mongo legado

Para desativar gravações repetitivas, use --retryWrites=false.

Para detalhes, consulte --retryWrites.

O shell mongosh retorna uma saída que difere do shell mongo legado . Se você tiver scripts que exijam que a saída seja formatada de forma semelhante ao shell mongo legado , tente reformatar a saída mongosh com EJSON.stringify ().

Para obter detalhes, consulte Legado tojsononeline().

Trabalhar com trechos de código é diferente do shell mongo legado .

Para obter detalhes, consulte Obter ajuda para um trecho.

Voltar

Referência