0

I have a like table. and in that like table I have a array called videoLikes. I need to store the userData who had liked the video. so when I am trying to push an object with userId field into that array I got duplicate datas. my userId is unique on model so I need to push only a user once in that array. I have tried $addToSet operation but it's not working properly.

My usecase is when a user tried to like the video second time it won't push to that array.

{
  "videoId": 275,
  "likesCount": 4,
  "videoLikes": [
    {
      "userId": 149,
      "uid": "5B8slS9AqpeNMJWK5CgbwzdXhQ82",
      "_id": {
        "$oid": "625569ecd56d19a1954f5cc2"
      }
    },
    {
      "userId": 149,
      "uid": "5B8slS9AqpeNMJWK5CgbwzdXhQ82",
      "_id": {
        "$oid": "625569ecd56d19a1954f5cc4"
      }
    },
    {
      "userId": 149,
      "uid": "5B8slS9AqpeNMJWK5CgbwzdXhQ82",
      "_id": {
        "$oid": "625569ecd56d19a1954f5cc0"
      }
    },
    {
      "userId": 149,
      "uid": "5B8slS9AqpeNMJWK5CgbwzdXhQ82",
      "_id": {
        "$oid": "625569ecd56d19a1954f5cbe"
      }
    }
  ]
}

1 Answer 1

1
  • you should normalize the schema as when you know userId you know uid, this way you only have to store userId in array which is a integer and can be easily handled to make it unique.
  • you probably wanna learn about pre and post in mongoose and triggers in mongoDB.

using triggers you'll get time to check whether the user liking is previously done or not and perform action on its behalf. for checking whether a userId liked or not you can use Object instead of array example:

let schema=mongoose.Schema{
   videoId:Number,
   likesCount:Number,
   videoLikes={{uid:Number}}
}
Sign up to request clarification or add additional context in comments.

2 Comments

sorry i need to store it in a array
you can use array just replace {{uid:Number}} with [{uid:Number}] . I have suggested it because of O(1) time checking if the user has liked or not.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.