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
Métodos obsoletos
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 |
---|---|
| Estágio de agregação: |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| Não é mais necessário. Consulte Ler operações em um nó secundário. |
Ler comportamento de preferência
Ler operações em um nó secundário
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:
A opção de string de conexão
readPreference
ao se conectar ao nó.O método
Mongo.setReadPref()
.
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()
.
show
Métodos de ajuda
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.
Comportamento de preferência de escrita
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
.
Métodos e atributos do ObjectId
Estes métodos ObjectId() funcionam de forma diferente no mongosh
e no mongo
shell legado .
Método ou Atributo | mongo Comportamento | mongosh Comportamento |
---|---|---|
| Returns a hexadecimal string: 6419ccfce40afaf9317567b7 | Undefined (Not available) |
| Returns the value of ObjectId.str :6419ccfce40afaf9317567b7 | Returns a formatted string: ObjectId("6419ccfce40afaf9317567b7") |
| Returns a formatted string: ObjectId("6419ccfce40afaf9317567b7") | Returns a hexadecimal formatted string: 6419ccfce40afaf9317567b7 |
Numeric Values
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 |
---|---|
|
|
|
|
|
|
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.
Valores indefinidos
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.
Comportamento de cotação de objetos
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" } }
Limitações nas chamadas de banco de dados
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 matrizSetters 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()
.
Construtores
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()
.
Funções do gerador
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(); }
Classificação de array
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.
Configuradores de JavaScript
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 }); } }
Exceções de comando
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.
Configuração de shell
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.
Tipos de dados
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.
Métodos
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().
Gravações repetíveis
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
.
Saída legada
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()
.
Trechos de código
Trabalhar com trechos de código é diferente do shell mongo
legado .
Para obter detalhes, consulte Obter ajuda para um trecho.