Home > Software design >  Find record in mongo $nin on array
Find record in mongo $nin on array

Time:02-22

I have a database (mongo) that stores posts and user separate. Within the posts schema I have an array. When a user marks a post as read, their user id is pushed into the array on the post schema. I'm then trying to display only the posts which their user id don't appear in the array.

Here is an example of my post structure.

{ "_id" : ObjectId("620eb60406b710c3ba2250f1"), "icon" : "fas fa-bullhorn", "title" : "Test Post", "scope" : true, "postedby" : "System", "postbody" : "Testing only content", "postcolour" : "orange", "posteddate" : "17/02/2022", "posthideuser" : [ "6205612355b2676a978b172b", "6203e917055a3558ffeb9fca" ] "__v" : 0 }

I tried using the following:

const posts = await Post.find({ posthideuser: { $nin: [user_id] } });

Which hasn't worked.

My Application is node, express/ejs. I will be happy to provide more information if required. Thanks in advance!

CodePudding user response:

Your query seems to work as expected:

 db.collection.find({
  posthideuser: {
    $nin: [
    "test2"
    ]
  }
})

playground

CodePudding user response:

There was an issue with the structure as indicated.

await Post.findByIdAndUpdate(id, { $push: { posthideuser: [res.locals.user_id] } });

should be: await Post.findByIdAndUpdate(id, { $push: { posthideuser: res.locals.user_id } });

  • Related