【问题标题】:Cannot read property 'collection' of null (CosmosDB+mongo+node)无法读取 null 的属性“集合”(CosmosDB+mongo+node)
【发布时间】:2018-06-27 15:20:40
【问题描述】:

我正在关注这个:https://docs.microsoft.com/en-us/azure/cosmos-db/mongodb-samples

这里是代码:

var MongoClient = require('mongodb').MongoClient;
var assert = require('assert');
var ObjectId = require('mongodb').ObjectID;
var url = 'mongodb://<endpoint>:<`enter code `enter code here`here`password>@<endpoint>.documents.azure.com:10255/?ssl=true';

var insertDocument = function(db, callback) {
db.collection('families').insertOne( {
        "id": "AndersenFamily",
        "lastName": "Andersen",
        "parents": [
            { "firstName": "Thomas" },
            { "firstName": "Mary Kay" }
        ],
        "children": [
            { "firstName": "John", "gender": "male", "grade": 7 }
        ],
        "pets": [
            { "givenName": "Fluffy" }
        ],
        "address": { "country": "USA", "state": "WA", "city": "Seattle" }
    }, function(err, result) {
    assert.equal(err, null);
    console.log("Inserted a document into the families collection.");
    callback();
});
};

var findFamilies = function(db, callback) {
var cursor =db.collection('families').find( );
cursor.each(function(err, doc) {
    assert.equal(err, null);
    if (doc != null) {
        console.dir(doc);
    } else {
        callback();
    }
});
};

var updateFamilies = function(db, callback) {
db.collection('families').updateOne(
    { "lastName" : "Andersen" },
    {
        $set: { "pets": [
            { "givenName": "Fluffy" },
            { "givenName": "Rocky"}
        ] },
        $currentDate: { "lastModified": true }
    }, function(err, results) {
    console.log(results);
    callback();
});
};

var removeFamilies = function(db, callback) {
db.collection('families').deleteMany(
    { "lastName": "Andersen" },
    function(err, results) {
        console.log(results);
        callback();
    }
);
};

MongoClient.connect(url, function(err, db) {
assert.equal(null, err);
insertDocument(db, function() {
    findFamilies(db, function() {
    updateFamilies(db, function() {
        removeFamilies(db, function() {
            db.close();
        });
    });
    });
});
});

我不断收到此错误:

db.collection('families').insertOne( {
   ^

TypeError: Cannot read property 'collection' of null

当我使用 robomongo 进行测试时,数据库可以正常工作,但无法与 nodeJS 连接。 我已经尝试重置密码并从 azure 门户创建新的 cosmosDB,一切似乎都很好。

【问题讨论】:

    标签: node.js mongodb azure azure-cosmosdb


    【解决方案1】:

    对于node-mongodb-native 的最新版本 (v3.0.1),您需要使用以下语法连接到 MongoDB,如下所示:

    var MongoClient = require('mongodb').MongoClient;
    var assert = require('assert');
    var ObjectId = require('mongodb').ObjectID;
    var url = 'mongodb://<endpoint>.documents.azure.com:10255/?ssl=true';
    
    // ...
    
    MongoClient.connect(url, { 
      auth: {
        user: '<endpoint>',
        password: '<password>'
      }
    }, function(err, client) {
      assert.equal(null, err);
    
      var db = client.db('<dbname>');
    
      insertDocument(db, function() {
        findFamilies(db, function() {
          updateFamilies(db, function() {
            removeFamilies(db, function() {
              client.close();
            });
          });
        });
      });
    });
    

    对于 Mongoose (v5.0.1),您可以使用以下代码创建连接:

    const mongoose = require('mongoose');
    
    mongoose.connect('mongodb://<endpoint>.documents.azure.com:10255/databasename?ssl=true', {
        auth: {
          user: '<endpoint>',
          password: '<password>'
        }
      })
      .then(() => console.log('connection successful'))
      .catch((err) => console.error(err));
    

    【讨论】:

    • 能不能也分享一下mongoose和cosmosdb的连接方法。这是我当前的代码。 mongoose.connect('mongodb://localhost:27017/databasename', { useMongoClient: true }) .then(() => console.log('连接成功')) .catch((err) => console.error (错误));
    • 好的,添加了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    相关资源
    最近更新 更多