azure cosmos db 在 mongodb.com 中创建了集合

Posted

技术标签:

【中文标题】azure cosmos db 在 mongodb.com 中创建了集合【英文标题】:azure cosmos db has collections created in mongodb.com 【发布时间】:2020-12-22 17:13:56 【问题描述】:

当我使用 mean stack 练习一些基本的 crud 操作时,我在“videos”集合中创建了一个名为“test”的数据库,后来我开始学习 Cosmos DB,其中创建了数据库“cosmos-db-demo”并将集合作为“视频集合”。我能够将我的应用程序连接到 cosmos DB,但令我惊讶的是,当我执行后期操作时,数据被插入到测试>集合中......而不是在cosmos-db-demo>视频收藏。这个数据库是如何插入的? 记录不应该插入到我连接的那个吗?

mongoose.connect('mongodb://cosmos-db-acc:....@cosmos-db-acc.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retrywrites=false&maxIdleTimeMS=120000&appName= @cosmos-db-acc@').then(() => console.log('连接到 cosmos DB');).catch((err) => console.log(err));

【问题讨论】:

能否提供您的代码? 添加了连接代码。 请将连接字符串更新为mongodb://cosmos-db-acc:....@cosmos-db-acc.mongo.cosmos.azure.com:10255/<db name>。它会告诉应用程序连接哪个数据库。 【参考方案1】:

关于这个问题,我们不能在应用程序中定义数据库名称和连接名称来告诉应用程序连接哪个数据库和连接。关于如何实现它,在您的连接字符串中添加数据库名称并在您的模型中添加 collection: "<connection name>"

例如

    创建.env文件
COSMODDB_USER = "<Azure Cosmos account's user name, usually the database account name>"
COSMOSDB_PASSWORD = "<Azure Cosmos account password, this is one of the keys specified in your account>"
COSMOSDB_HOST= "<Azure Cosmos Host name>"
COSMOSDB_PORT=10255
    代码
var mongoose = require("mongoose");
var env = require("dotenv").config();

//connect
mongoose
  .connect(
    "mongodb://" +
      process.env.COSMOSDB_HOST +
      ":" +
      process.env.COSMOSDB_PORT +
      "/" +
      "User" + //  tell the application to connect which databse
      "?ssl=true&replicaSet=globaldb",
    
      auth: 
        user: process.env.COSMODDB_USER,
        password: process.env.COSMOSDB_PASSWORD,
      ,
      useNewUrlParser: true,
      useUnifiedTopology: true,
      retryWrites: false,
    ,
  )
  .then(() => console.log("Connection to CosmosDB successful"))
  .catch((err) => console.error(err));

// define model
const Family = mongoose.model(
  "Family",
  new mongoose.Schema(
    
      lastName: String,
      parents: [
        
          familyName: String,
          firstName: String,
          gender: String,
        ,
      ],
      children: [
        
          familyName: String,
          firstName: String,
          gender: String,
          grade: Number,
        ,
      ],
      pets: [
        
          givenName: String,
        ,
      ],
      address: 
        country: String,
        state: String,
        city: String,
      ,
    ,
     collection: "Familay" , // tell the application to connect which connection
  ),
);

const family = new Family(
  lastName: "Volum",
  parents: [ firstName: "Thomas" ,  firstName: "Mary Kay" ],
  children: [
     firstName: "Ryan", gender: "male", grade: 8 ,
     firstName: "Patrick", gender: "male", grade: 7 ,
  ],
  pets: [ givenName: "Buddy" ],
  address:  country: "USA", state: "WA", city: "Seattle" ,
);

family.save((err, saveFamily) => 
  console.log(JSON.stringify(saveFamily));
);

【讨论】:

将集合名称和数据库名称添加到连接字符串效果很好。谢谢。

以上是关于azure cosmos db 在 mongodb.com 中创建了集合的主要内容,如果未能解决你的问题,请参考以下文章

Azure Cosmos DB 中托管的 MongoDB:分片与分区

azure cosmos db 在 mongodb.com 中创建了集合

azure cosmos db 在 mongodb.com 中创建了集合

在 Azure Cosmos DB for MongoDB API 中使用无默认索引策略的 sort() 游标方法

Spring with mongo-java-driver 使用 Azure Cosmos DB 作为 MongoDB

将Cosmos DB模拟器(MongoDB API)迁移到Azure时发生致命错误