首页 > 解决方案 > 当我尝试使用更新方法时,为什么 mongo 说这不是有效的 JavaScript 对象?

问题描述

当我尝试更新记录时出现此错误:(node:2018) UnhandledPromiseRejectionWarning: MongoError: document must be a valid JavaScript object

这是我试图运行的代码:

                        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)};
                                };
                            };
                        });

它一直说 group[0] 不是有效的 JavaScript 对象,但 typeof group[0] 返回“object”。这里还有一个 group[0] 控制台登出的例子:

{ _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 } ] }

非常感谢任何帮助!谢谢!

标签: javascriptnode.jsmongodb

解决方案


看起来错误是由下面第 7 行的右括号引起的。这是关闭更新,它排除group[0]和包含回调:

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

尝试在回调之后将其移动到块的末尾:

//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)
    };
  });

也就是说,请注意collection.update()已被弃用一段时间。您应该考虑更新到至少 3.X 版本的节点驱动程序并使用updateOneupdateManyhttps ://mongodb.github.io/node-mongodb-native/2.2/api/Collection.html#update


推荐阅读