Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用鉴别器、Mongo DB API和Mongoose将数据写入Cosmos DB? 问题摘要_Javascript_Node.js_Mongoose_Azure Cosmosdb Mongoapi_Discriminator - Fatal编程技术网

Javascript 如何使用鉴别器、Mongo DB API和Mongoose将数据写入Cosmos DB? 问题摘要

Javascript 如何使用鉴别器、Mongo DB API和Mongoose将数据写入Cosmos DB? 问题摘要,javascript,node.js,mongoose,azure-cosmosdb-mongoapi,discriminator,Javascript,Node.js,Mongoose,Azure Cosmosdb Mongoapi,Discriminator,我正在尝试使用Mongo DB API和Mongoose为我的对象建模编写一个文档到我的Cosmos DB 为了降低成本,我希望将我的所有文件集中在一个集合中。我想通过使用鉴别器来实现这一点。这是一个Node.js项目v14.4.0,我使用的是mongodb v3.5.9和mongoose v5.9.21 预期结果 使用上述技术堆栈,我能够将文档写入Cosmos DB中的单个集合 实际结果 没有数据被写入数据库。没有错误消息,我正在将未定义的日志记录到我的控制台。下一节将对此进行详细介绍 我试过

我正在尝试使用Mongo DB API和Mongoose为我的对象建模编写一个文档到我的Cosmos DB

为了降低成本,我希望将我的所有文件集中在一个集合中。我想通过使用鉴别器来实现这一点。这是一个Node.js项目v14.4.0,我使用的是mongodb v3.5.9和mongoose v5.9.21

预期结果 使用上述技术堆栈,我能够将文档写入Cosmos DB中的单个集合

实际结果 没有数据被写入数据库。没有错误消息,我正在将未定义的日志记录到我的控制台。下一节将对此进行详细介绍

我试过的 我遵循了Microsoft文档中关于如何实现目标的教程

此外,我还看了朱棣文的这篇博文

我在下面包含了我的代码摘录

代码 /utils/db.js

./utils/models/models-discriminator.js

index.js

在运行此代码时,这就是输出到我的控制台的内容

连接到宇宙数据库成功

已保存:未定义

已保存:未定义

如果您能提供任何帮助,我将不胜感激


@Darshitpatel在回调中记录了错误消息,让我找出这不起作用的原因。我编辑了这篇文章,展示了为了让这篇文章发挥作用我必须做的修改。

Hi@BradleyGamiMarques


我已经阅读了您的代码,我认为您应该将err参数记录在“vacay_common的”save callback中。

我已经将错误记录到我的控制台,并且我返回了“不支持可重试写入”。请通过在连接字符串或等效的特定于驱动程序的配置中指定“retrywrites=false”来禁用可重试写入。请让我尝试并指定位于utils/db.js中的连接字符串内部。请确保,尝试并让我知道:)您的解决方案有效!我已经更新了问题中的代码来反映这一点。太好了。祝贺:)
require('dotenv').config();
const mongoose = require('mongoose');

mongoose.connect(`mongodb://${process.env.COSMOSDB_HOST}:${process.env.COSMOSDB_PORT}/${process.env.COSMOSDB_DBNAME}?ssl=true&replicaSet=globaldb`, {
  auth: {
    user: process.env.COSMOSDB_USER,
    password: process.env.COSMOSDB_PASSWORD,
  },
  useNewUrlParser: true,
  useUnifiedTopology: true,
  retrywrites: false, // Solution
})
  .then(() => console.log('Connection to CosmosDB successful'))
  .catch((err) => console.error(err));

module.exports = mongoose.connection;
const mongoose = require('mongoose');

const baseConfig = {
    discriminatorKey: "_type", //If you've got a lot of different data types, you could also consider setting up a secondary index here.
    collection: "alldata"   //Name of the Common Collection
};

const commonModel = mongoose.model('Common', new mongoose.Schema({}, baseConfig));

const Family_common = commonModel.discriminator('FamilyType', 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
    }
}, baseConfig));

const Vacation_common = commonModel.discriminator('VacationDestinationsType', new mongoose.Schema({
    name: String,
    country: String
}, baseConfig));

module.exports = {
    Family_common,
    Vacation_common,
}
const { Family_common, Vacation_common } = require('./utils/models/models-discriminator');
const connection = require('./utils/db');
connection.once('open', () => {
  const family_common = new Family_common({
    lastName: "Volum",
    parents: [
      { firstName: "Thomas" },
      { firstName: "Mary Kay" }
    ],
    children: [
      { firstName: "Ryan", gender: "male", grade: 8 },
      { firstName: "Patrick", gender: "male", grade: 7 }
    ],
    pets: [
      { givenName: "Blackie" }
    ],
    address: { country: "USA", state: "WA", city: "Seattle" }
  });

  family_common.save((err, saveFamily) => {
    console.log("Saved: " + JSON.stringify(saveFamily));
  });

  const vacay_common = new Vacation_common({
    name: "Honolulu",
    country: "USA"
  });

  vacay_common.save((err, saveVacay) => {
    console.log("Saved: " + JSON.stringify(saveVacay));
  });
});