gpt4 book ai didi

node.js - Mongoose 是否与具有预配吞吐量的 Cosmos DB 一起使用?

转载 作者:行者123 更新时间:2023-12-01 04:27:35 27 4
gpt4 key购买 nike

说明:

我已经设置了一个具有预配置吞吐量的新 Cosmos DB 数据库。这是为了共享所有集合的 RU/s 并最大限度地降低成本。

我访问 Cosmos 的 API 是带有 Express 和 Mongoose 的 Node.JS。

数据库现在设置为 1 集合命名 团体带分区键/分片键 分区

我过去曾将 Mongoose 与 Cosmos DB 一起使用没有问题,但是当我尝试在这种模式下时,我收到以下错误消息:

{
"_t": "OKMongoResponse",
"ok": 0,
"code": 2,
"errmsg": "Shared throughput collection should have a partition key\r\nActivityId: 9217017f-0000-0000-0000-000000000000, Microsoft.Azure.Documents.Common/2.4.0.0",
"$err": "Shared throughput collection should have a partition key\r\nActivityId: 9217017f-0000-0000-0000-000000000000, Microsoft.Azure.Documents.Common/2.4.0.0",
"name": "MongoError"
}

我已经搜索了很多答案,但我没有看到其他人在运行相同的环境时遇到相同的问题。

环境:
  • Node 版本:v10.16.0
  • Mongoose 版本:5.6.6
  • 快捷版:4.17.1

  • 测试:

    我试过像这样设置 Mongoose 模型:
    var schema = mongoose.Schema({
    name: String,
    }, { shardKey: { partition: "1" }})

    像这样:
    var schema = mongoose.Schema({
    name: String,
    partition: { type: String, default: "1"},
    })

    我也尝试将分区键作为值发送
    {
    "name": "Test",
    "partition": "1"
    }

    如果我在 Azure 门户数据资源管理器中将上述 JSON 作为新文档运行,我可以添加该文档。

    有谁知道 Mongoose 是否在预配置的吞吐量模式下支持 Cosmos DB?
    如果它受支持,我能否举一个关于如何设置 Mongoose /模型以使其正常工作的示例。

    谢谢

    最佳答案

    你的错误

    Shared throughput collection should have a partition key



    在具有预配吞吐量的数据库中创建没有指定分片键的集合时,将返回此错误。这表明 Mongoose 正在尝试创建集合,而不是使用您创建的“组”。我相信,要使用组集合,您应该定义模型:

    const Model = mongoose.model("Group", schema)

    我发现的另一个问题是当 Mongoose 尝试创建索引时,它会创建集合 system.indexes,这也会导致上述错误。当 autoIndex 关闭时,事情会更顺畅

    希望这会解决您的问题

    模式定义

    为了让查询工作,我发现架构需要定义为:

    var schema = mongoose.Schema({
    name: String,
    partition: {
    type: Number
    default: 1
    },
    }, { shardKey: { partition: "1" }})

    如果省略 shardKey 选项,您会收到以下错误:

    document does not contain shard key



    Mongoose 支持创建集合

    据我所知,mongoose 不支持在具有预配置吞吐量的数据库中创建集合。可以使用 native mongo 客户端创建集合,例如:

    const db = Model.db.db;

    db.command({
    shardCollection: `${dbName}.${collectionName}`,
    key: {
    partition: 'hashed'
    },
    }).then(...)

    当我试过 key 时 { partition: 1 } ,我收到以下错误:

    Only single hashed key is supported for sharded collection.



    所以我坚持使用“散列”

    希望这个对你有帮助

    关于node.js - Mongoose 是否与具有预配吞吐量的 Cosmos DB 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57173181/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com