Actualmente tengo una colección de publicaciones. En cada publicación, cuando un usuario la marca como leída, inserta su _id de usuario en una matriz dentro del documento de la publicación.
Luego intento leer todas las publicaciones y encontrar qué usuarios no han leído el documento. Mi idea era probar esta función $nin mientras recorría las publicaciones y luego las almacenaba en un nuevo objeto al que podía llamar con el mismo número de índice. Sin embargo, estoy luchando por encontrar la sintaxis correcta para obtenerla debido a que el objeto ha estado en formato de cadena.
const allPosts = await Post.find({}); for (let i = 0; i < allPosts.length; i++) { console.log(i) const findUsers = await User.find({ _id: { $nin: ObjectID([allPosts[i].posthideuser]) } }) console.log(findUsers); }Está convirtiendo toda la matriz en un ObjectID en lugar de convertir valores individuales. Use .map() con el constructor ObjectId
const allPosts = await Post.find({}); for (let i = 0; i < allPosts.length; i++) { console.log(i) const objIds = allPosts[i].posthideuser.map((x) => new mongoose.Types.ObjectId(x)); const findUsers = await User.find({ _id: { $nin: objIds } }) console.log(findUsers); }