Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

261
Vistas
¿MongoDB findOne usando $ y $ elemMatch no funciona?

Estoy tratando de verificar si existe una conversación existente entre dos usuarios antes de crear otra.

Mi objeto de conversación almacena los participantes de la conversación en una matriz, necesito devolver un objeto de conversación que tenga AMBOS participantes (senderId y recId) que existen en mi base de datos pero no puedo compilar para corregir la consulta de MongoDB para obtenerlo.

Consulte las consultas que probé a continuación porque probé todas las formas de usar $ y & $ elemMatch pero no puedo hacer que funcione.

Gracias

Modelo de conversación

 const conversationSchema = mongoose.Schema( { participants: [participantSchema], }, {timestamps: true} ) const participantSchema = mongoose.Schema( { userId: { type: mongoose.Schema.Types.ObjectId, required: true, ref: `User`, }, username: { type: String, required: true, } } )

Objeto de conversación

 { _id: 61cb6316asas4b54e09168234, participants: [ { userId: 61b777ea6815a69a625b, username: 'johnsmith' }, { userId: 61bc0dcbe7181ccfd806, username: 'testuser' } ], createdAt: 2021-12-28T19:18:46.673Z, updatedAt: 2021-12-28T23:41:12.364Z }

Consultas que he intentado que NO SON las que necesito o no funcionan

 // null - no convo found when the convo definitely exists in db const existingConvo = await Conversation.findOne({ $and: [{ userId: senderId }, { userId: recId }], }) // works but only checks for ONE id property // if I make an array: "Query filter must be an object, got an array" const existingConvo = await Conversation.findOne({ participants: { $elemMatch: { userId: senderId } }, }) // "Unknown operator $and" const existingConvo = await Conversation.find({ participants: { $and: [{ userId: senderId }], }, }) // returns empty array when it should have the convo object const existingConvo = await Conversation.find({ participants: { $all: [{ userId: senderId }, { userId: recId }] }, })
about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda