TypeScript架构中的Dynamoose嵌套映射/数组

TypeScript架构中的Dynamoose嵌套映射/数组,typescript,dynamoose,Typescript,Dynamoose,我正在尝试为以下示例创建架构: { "foods": [ { "fruits": [{ "apple": { "color": "red", "shape": "round"

我正在尝试为以下示例创建架构:

{
    "foods": [
        {
            "fruits": [{
                "apple": {
                    "color": "red",
                    "shape": "round"
                }
            }]
        }
    ]
}
我最初试图做下面的结构,这在技术上是正确的,应该可以工作,但由于在中发现的错误而失败

然而,它似乎不起作用。正在获取类型错误:无法读取未定义的属性“toLowerCase”。由于嵌套数组或对象,出现小写错误

我还看到
TypeMismatch:Expected foods.0.fruits的类型是object,而不是find type object。
当我试图更改模式时出现了后者,我认为可能是这样,但这不是问题所在

  • 这是使用版本2.7.0

解决方案:将嵌套模式提取到它自己的模式中,并引用原始模式中的模式

const appleSchema = new dynamoose.Schema({
  apple: {
    type: Object,
    schema: {
      color: String,
      shape: String,
    },
  },
});
然后在原始版本中:

        fruits: {
          type: Array,
          schema: [appleSchema],
        },

解决方案:将嵌套模式提取到它自己的模式中,并引用原始模式中的模式

const appleSchema = new dynamoose.Schema({
  apple: {
    type: Object,
    schema: {
      color: String,
      shape: String,
    },
  },
});
然后在原始版本中:

        fruits: {
          type: Array,
          schema: [appleSchema],
        },

另一个选项是将您的架构更改为以下内容:

export const FoodsSchema = new dynamoose.Schema({
  foods: {
    type: Array,
    schema: [{
      type: Object,
      schema: {
        fruits: {
          type: Array,
          schema: [{
            type: Object,
            schema: {
              apple: {
                type: Object,
                schema: {
                  color: String,
                  shape: String,
              },
            },
          ],
        },
      },
    }],
  },
});
(希望这是正确的)

最初在
水果
模式
属性中,您有一个数组,然后
苹果

schema: [
  apple: {
我可能错了,但我甚至不认为这是有效的JavaScript

关键是,您可以确定地在1个模式中执行您想要执行的操作。您还可以将其分解为更小的对象,而不是模式,以使其更简单

然而,正如在另一个答案中提到的,将其分解为模式也同样有效


实现这一点有很多不同的方法。

另一个选择是将您的模式更改为以下内容:

export const FoodsSchema = new dynamoose.Schema({
  foods: {
    type: Array,
    schema: [{
      type: Object,
      schema: {
        fruits: {
          type: Array,
          schema: [{
            type: Object,
            schema: {
              apple: {
                type: Object,
                schema: {
                  color: String,
                  shape: String,
              },
            },
          ],
        },
      },
    }],
  },
});
(希望这是正确的)

最初在
水果
模式
属性中,您有一个数组,然后
苹果

schema: [
  apple: {
我可能错了,但我甚至不认为这是有效的JavaScript

关键是,您可以确定地在1个模式中执行您想要执行的操作。您还可以将其分解为更小的对象,而不是模式,以使其更简单

然而,正如在另一个答案中提到的,将其分解为模式也同样有效


有很多不同的方法来实现这一点。

如果我上面列出的代码在最新版本上仍然产生错误,请针对提交错误,以便我可以在某个时候修复这些错误。是的,这是我在删除特定于工作的详细信息时出现的语法错误。我在原来的问题中已经解决了这个问题。感谢您指出。如果我上面列出的代码在最新版本上仍然产生错误,请针对提交错误,以便我可以在某个时候修复这些错误。是的,这是我在删除特定于工作的详细信息时出现的语法错误。我在原来的问题中已经解决了这个问题。谢谢你指出这一点。