nodeJS + MonogoDB - TypeError:无法读取null的属性'collection'

时间:2017-08-18 23:23:30

标签: javascript node.js mongodb

我开始使用nodeJS和mongoDB并且刚开始,在我连接到db之后,我收到了这个错误。 我读了互联网上的每篇文章,仍然没有工作...... 我通过mongoDB打开一个连接并尝试插入数据,代码:

var insertUserMovieRating = function(successCallback, errCallback, movieName, rating) {
    var url = config.db.databaseType + '://' + config.user + ':' + config.password + '@' + config.db.server + ':' + config.db.port + '/' + config.db.databaseName;
    MongoClient.connect(url, function(err, db) {
        if (err) {
            errCallback(err)
        }
        if (db != null) {
            console.log("insert");
            var collection = db.collection(config.db.databaseName);
            collection.update({
                title: movieName
            }, {
                '$push': {
                    'rating': rating
                }
            }, {
                upsert: true
            }, function(err, res) {
                if (err) errCallback(err);
                successCallback("ok");
                // db.close();
            });
        }
    });
};

我是如何解决这个问题的?我认为我坐了5个小时仍然没有解决这个问题,我非常感谢我将得到的每一个帮助,谢谢!

已解决:解决方案是真正写入与URL var的连接值,而不是其他变量。 感谢所有帮助过我的人!

2 个答案:

答案 0 :(得分:1)

我认为db.collection(config.db.databaseName)存在问题。您的数据库与其拥有的集合不同。看起来你并没有真正掌握正确的收藏。

也许尝试像

这样的东西
var collection = db.movies;  // or whatever the name of your collection is

对于像这样的问题,我总是建议打开MongoDB shell并弄清楚语法并让它在那里工作。获得解决方案后,您只需将其粘贴到Node.js代码中即可。

答案 1 :(得分:0)

我认为您错过了传递集合名称,如果未使用集合中的更新记录定义集合,则需要进行错误处理。

        var insertUserMovieRating = function(successCallback, errCallback, movieName, rating) {
            var url = config.db.databaseType + '://' + config.user + ':' + config.password + '@' + config.db.server + ':' + config.db.port + '/' + config.db.databaseName;

            //url = 'mongodb://admin:password@localhost:27017/db'
            //make sure your url look like as above
            MongoClient.connect(url, function(err, db) {
                if (err) {
                    errCallback(err)
                }
                if (db) {
                    console.log("insert");
                    var collectionName = 'movies'; // or whatever the name of your collection name , its similar like your table name in SQL
                    var collection = db.collection(collectionName);
                    if(!collection){
                      errCallback('Collection is not defined in database')
                    }
                    collection.update({
                        title: movieName
                    }, {
                        '$push': {
                            'rating': rating
                        }
                    }, {
                        upsert: true
                    }, function(err, res) {
                        if (err) errCallback(err);
                        successCallback("ok");
                        // db.close();
                    });
                }
            });
        };

请查看文档帖子herehere

希望这会对你有所帮助!!