使用Azure cosmos DB表达

时间:2018-01-08 14:38:59

标签: node.js mongodb express mongoose azure-cosmosdb

使用express(nodejs),mongoose和Azure Cosmos DB来返回对象。 当我连接到我的本地mongodb时,以下代码正确返回本地mongodb中存在的提交对象列表。

Commit
  .find({}, function(err, commits) {
    if (err) {
      res.render('search/index', {});
    } else {
      res.json(commits);
    }
  });

但是,当使用Azure门户网站上显示的PRIMARY CONNECTION STRING连接到Azure Cosmos数据库时,代码只会返回一个空列表。 我检查了mongoose.connection.readyState值是1。 此外,我可以使用Robo 3T连接到Azure Cosmos数据库。

2 个答案:

答案 0 :(得分:0)

Mongoose旨在与MongoDB一起使用。如果您使用真正的MongoDB服务器进行本地测试会产生预期结果,那么故障可能不会出现在mongoose或您的代码中。由于CosmosDB只是试图模仿MongoDB的API,因此无法保证它的工作方式相同。在你的情况下,显然它没有。

能够使用设计用于MongoDB的工具连接到CosmosDB并不一定意味着CosmosDB将返回正确的结果。

如果您需要基于云的MongoDB部署,那么使用MongoDB Atlas可能是此时的最佳解决方案。

答案 1 :(得分:0)

最后我可以自己解决这个问题。

该库的最新版本(v3.1.1)无法用于连接Azure Cosmos DB。 你应该使用mongodb 2.2.33。

我在https://docs.microsoft.com/en-us/azure/cosmos-db/mongodb-samples的评论中找到了解决方案。