Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

541
Visualizações
El operador Mongo $push no acepta el objeto de acuerdo con el mecanografiado: "Ninguna sobrecarga coincide con esta llamada"

Quiero enviar un mensaje en una matriz con Mongoose/Mongo. Mecanografiado afirma que:

Ninguna sobrecarga coincide con esta llamada. Sobrecarga 1 de 3, '(id: any, update: UpdateQuery, options: QueryOptions & { rawResult: true; }, callback?: ((err: any, doc: FindAndModifyWriteOpResultObject, res: any) => void) | indefinido) : any', dio el siguiente error. Escriba '{ mensajes: { mensaje: cadena; autorId: cadena; }; }' no se puede asignar al tipo 'PushOperator<_AllowStringsForIds<Pick<Pick<_LeanDocument, string | número | símbolo>, cadena | número | símbolo>>>'. Escriba '{ mensajes: { mensaje: cadena; autorId: cadena; }; }' no se puede asignar al tipo 'NotAcceptedFields<_AllowStringsForIds<Pick<Pick<_LeanDocument, string | número | símbolo>, cadena | número | símbolo>>, solo lectura cualquiera[]>'. La propiedad 'mensajes' es incompatible con la firma de índice.

Aquí está el fragmento de código:

 const conversation = await Conversation.findByIdAndUpdate( conversationId, { $push: { messages: { message, authorId } }, lastMessage: { authorId, snippet: `${message.substring(0, 47)}...`, read: false, }, }, { new: true } );

La compilación falla debido a esto. ¿Como arreglarlo?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Este es un problema con los tipos que no se alinean.

Tengo entendido que la operación de inserción solo se puede realizar en un campo que se define explícitamente como una matriz en algún punto de su código anteriormente.

Una posible solución es establecer explícitamente el tipo de su colección para que contenga los campos que desea (lo cual es una buena práctica de todos modos).

Entonces, en lugar de algo similar a

 const Conversations = database.collection('conversations');

Definiría explícitamente el esquema para los documentos de 'conversación' y luego escribiría la colección:

 import { Collection } from 'mongodb'; //... type Conversation = { messages: { message: String, authorId: Number }[], //... } const Conversations: Collection<Conversation> = database.collection('conversations');
over 4 years ago · Santiago Trujillo Relatório

0

Si sabe que está haciendo lo correcto, puede omitir esto con as .

El siguiente ejemplo lo ilustra.

 await driver.collection('myCollection').findOneAndUpdate( { _id: "<some _id that I have>", }, { '$push': { 'myArrayField': { '$position': 0, '$each': [ myItemToPush ], } } as unknown as PushOperator<Document>, }, { returnDocument: 'after', upsert: false, }, );

Tenga en cuenta lo as unknown as PushOperator<Document> : esto es lo que lo sacará de este problema. Úselo correctamente, ya que Tyscript le permitirá usarlo as cualquier lugar y usarlo sin cesar, esto puede frustrar el propósito de usar un sistema de tipos.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda