Wiley Buchanan
Wiley Buchanan

Reputation: 121

Why is mongo saying this is not a valid JavaScript object when I try to use the update method?

I am getting this error when I try to update a record: (node:2018) UnhandledPromiseRejectionWarning: MongoError: document must be a valid JavaScript object

Heres my code that I'm trying to run:

                        global.db.collection("groups").find({userId: user_id.toString(), groupNumber:parseInt(realGroupNumber)}).toArray( function (err, group) {
                            if(err) {console.log(err)};

                            if(group[0]) {
                                group[0].students.push(NewRow[row]);
//NOTE: HERE IS WHERE THE ERROR HAPPENS (BELOW)
                                global.db.collection("groups").update({userId: user_id.toString(), groupNumber:parseInt(realGroupNumber)}), group[0], function (err, group) {
                                    if(err) {console.log(err)};
                                };
                            };
                        });

It keeps saying that group[0] is not a valid JavaScript object, but typeof group[0] returns 'object'. Also here is an example of group[0] console logged out:

{ _id: 5df7fcc562f67c0a0b66aefd,
  userId: '5d3f42db404e9e0a91fdd9d8',
  groupNumber: 3,
  selectedLeaders: [ '5df7d27e2e5e1904552a30a4' ],
  roomNumber: '333',
  groupNotes: '',
  students: 
   [ { firstName: 'June',
       userId: '5d3f42db404e9e0a91fdd9d8',
       lastName: 'Lopez',
       gender: 'female',
       groupId: 3,
       roomNumber: '1234',
       _id: 5dfac3a34c64110809726571 } ] }

Any help greatly appreciated! Thanks!

Upvotes: 0

Views: 866

Answers (1)

Adam Harrison
Adam Harrison

Reputation: 3421

It looks like the error is being caused by the closing parenthesis on line 7 below. This is closing the update, which excludes group[0] and the callback from being included:

global.db.collection("groups").update({
    userId: user_id.toString(),
    groupNumber: parseInt(realGroupNumber)
  }), group[0],         // <---- HERE
  function(err, group) {
    if (err) {
      console.log(err)
    };
  };

Try moving it to the end of the block, after the callback:

//NOTE: HERE IS WHERE THE ERROR HAPPENS (BELOW)
global.db.collection("groups").update({
    userId: user_id.toString(),
    groupNumber: parseInt(realGroupNumber)
  }, group[0],         
  function(err, group) {
    if (err) {
      console.log(err)
    };
  });

That said, note that collection.update() has been deprecated for some time. You should look into updating to at least a 3.X version of the Node driver and using updateOne or updateMany: https://mongodb.github.io/node-mongodb-native/2.2/api/Collection.html#update

Upvotes: 1

Related Questions