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 }] }, })