Tengo una aplicación de mensajería en la que un modelo de conversación almacena a los participantes de una conversación única.
Estoy tratando de consultar una conversación específica en la que dos ID de usuario están dentro de la matriz de participantes, pero aparece el mensaje de error "El filtro de consulta debe ser un objeto, tiene una matriz" .
Intenté colocar la matriz dentro de un objeto, pero no funcionó y no estoy seguro de cómo hacer que esta consulta funcione O si hay una mejor manera de realizar esta búsqueda.
¿Qué estoy haciendo mal?
MODELO
const conversationSchema = mongoose.Schema( { participants: [ { type: mongoose.Schema.Types.ObjectId, ref: `User` } ] } )CÓDIGO DE RUTA EXPRÉS
const existingConvo = await Conversation.findOne({ participants: { $elemMatch: [msg.senderId, msg.recId] }, // ^ Query filter must be an object, got an array })Su caso de uso debería requerir $all en lugar de $elemMatch , ya que requiere que la matriz de participants contenga ambos/todos los usuarios en su matriz de consulta.
Tu código debería ser así:
const existingConvo = await Conversation.findOne({ participants: { $all: [msg.senderId, msg.recId] } }) Aquí está el área de juegos de Mongo para que pueda hacer referencia al comportamiento de $all en la consulta nativa de Mongo.