4

我正在使用 Node 和 React 创建一个片段管理器,这只是一个学习项目,我们可以在我工作的地方使用它。

我之前使用 Express、Mongoose 和 mLab 进行了设置。怀着学习和挑战自我的心态,我想转而使用 AWS 的 DynamoDB。

我发现 Dynaamoose 将是一个很大的帮助,因为 API 几乎与 Mongoose 相同。但是,我似乎无法弄清楚如何重新创建 Schema.Types.ObjectId 所做的事情。

const SnippetSchema = new Schema({
id: {
    type: String,
    default: shortid.generate(),
    hashKey: true
},
user: {
    type: Schema.Types.ObjectId,
    ref: 'users'
},
category: {
    type: Schema.Types.ObjectId,
    ref: 'categories'
},
code: {
    type: String,
    required: true
},
title: {
    type: String,
    required: true
}});

它的格式不完美,但基本上我如何才能以同样的方式引用我的用户和我的类别?

4

2 回答 2

2

与 Mongoose 和 MongoDB 不同,Dynamoose 和 DynamoDB 没有默认的 _id 属性。Schema.Types.ObjectId因此,在 DynamoDB/Dynamoose 中没有这样的东西。

看起来您想要做的是类似.populate.

就我个人而言,我只是手动处理所有关联,使用.get.

在上面的架构示例中,该id属性将是您的主键。在 DynamoDB 中,主键必须是唯一的,否则它们将覆盖现有项目(除非您进行了一些检查)。

从这里我认为您可以构建一个系统来为您的每个文档生成 id,然后通过该 id 将其关联。我通常对这个属性使用字符串,但我认为它在技术上可以是任何受支持的 DynamoDB 属性类型。

希望这可以帮助您入门。如果它没有意义或者您需要更多帮助,请随时发表评论。作为Dynamoose GitHub 项目的成员,我非常活跃,所以也可以随意在他们的网站上创建问题或内容。我尝试Dynamoose每天检查一次 Stack Overflow 上的标签。我的联系信息也很容易找到。

祝您迁移到 Dynamoose 好运,如果您遇到任何其他问题或有任何其他问题,请告诉我!

于 2018-10-06T20:17:17.180 回答
0

我猜你想要这样:

const SnippetSchema = new Schema({
   id: {
     type: String,
     default: shortid.generate(),
     hashKey: true
   },
   parent: User,
   category:{
     type: String,
     required: true,
     index: {
       global: true
     }
   },
   code: {
     type: String,
     required: true
   },
   title: {
     type: String,
     required: true
   }
});

所以当 .get(id)

将返回带有名为“parent”的对象的所有数据,其中包含用户数据

于 2020-09-16T15:44:36.343 回答