phongyewtong
phongyewtong

Reputation: 5309

How do I find the correct array and push data into meteor.users custom array field in mongodb with meteor?

How to I find right course_id and and push a "myclass2" to classes_id field which is an array?

I have got this but it added an extra row to classes

let data = Meteor.users.update({_id: Meteor.userId(), "classes.course_id": course_id}, {
   $push: {
        "classes": {
            "classes_id": [class_name]
        }
    }}
)

Wrong update:

{
  "_id": "RoFFcaAfXBeR2napZ",
  "emails": [
    {
      "address": "[email protected]",
      "verified": false
    }
  ],
  "classes": [
      {
         "course_id": "svesvinfdsgrvnekuktndvsk",
         "classes_id": ["myclass1"]
      },
      {
         "course_id": "rgjjgdcrvnevghjcdvbbvddv",
         "classes_id": ["myclass1"]
      },
      {
         "classes_id": ["myclass2"]<----wrong update
      },
  ],
  "courses": [
    "qwmZdgQbrZ3rmHdN8"
  ]
}

Before Adding

{
  "_id": "RoFFcaAfXBeR2napZ",
  "emails": [
    {
      "address": "[email protected]",
      "verified": false
    }
  ],
  "classes": [
      {
         "course_id": "svesvinfdsgrvnekuktndvsk",
         "classes_id": ["myclass1"]
      },
      {
         "course_id": "rgjjgdcrvnevghjcdvbbvddv",
         "classes_id": ["myclass1"]
      },
  ],
  "courses": [
    "qwmZdgQbrZ3rmHdN8"
  ]
}

How do I achieve this? Add myclass2 to classes_id if i can find course_id

{
  "_id": "RoFFcaAfXBeR2napZ",
  "emails": [
    {
      "address": "[email protected]",
      "verified": false
    }
  ],
  "classes": [
      {
         "course_id": "svesvinfdsgrvnekuktndvsk",
         "classes_id": ["myclass1", "myclass2"]<----correct
      },
     {
         "course_id": "rgjjgdcrvnevghjcdvbbvddv",
         "classes_id": ["myclass1"]
      },
  ],
  "courses": [
    "qwmZdgQbrZ3rmHdN8"
  ]
}

Upvotes: 0

Views: 76

Answers (2)

phongyewtong
phongyewtong

Reputation: 5309

This works!

let data = Meteor.users.update({_id: Meteor.userId(), "classes.course_id": course_id}, {
     $push: {"classes.$.classes_id": class_name}
})

Upvotes: 0

MasterAM
MasterAM

Reputation: 16478

You can use the positional $ operator.

function addClassId(userId, courseId, classId) {
  c1.update({
    _id: userId,
    'classes.course_id': courseId
  }, {
    $push: {
      'classes.$.classes_id': classId
    }
  });
};  

It will get the first match from the classes array and push classId into its classes_id array.

Upvotes: 2

Related Questions