【问题标题】:Meteor inserting into a collection schema with array elements流星插入带有数组元素的集合模式
【发布时间】:2018-07-09 23:32:28
【问题描述】:

您好,我为 Mongo 集合创建了一个 SimpleSchema,该集合具有可变数量的子文档,称为 measurables。不幸的是,我已经有一段时间没有这样做了,我不记得如何插入这种类型的模式!有人可以帮帮我吗?

架构如下:

const ExerciseTemplates = new Mongo.Collection('ExerciseTemplates');

const ExerciseTemplateSchema = new SimpleSchema({
  name: {
    type: String,
    label: 'name',
  },
  description: {
    type: String,
    label: 'description',
  },
  createdAt: {
    type: Date,
    label: 'date',
  },
  measurables: {
    type: Array,
    minCount: 1,
  },
  'measurables.$': Object,
  'measurables.$.name': String,
  'measurables.$.unit': String,
});

ExerciseTemplates.attachSchema(ExerciseTemplateSchema);

方法是:

Meteor.methods({
  addNewExerciseTemplate(name, description, measurables) {
    ExerciseTemplates.insert({
      name,
      description,
      createdAt: new Date(),
      measurables,
    });
  },
});

我的表单发送的可测量数据是一个对象数组。

SimpleSchema 文档似乎已过时。如果我使用它们显示的带有可测量值的示例:类型:[Object] 用于对象数组。我收到一个错误,类型不能是数组,我应该将其设置为 Array。

任何建议都会很棒!

非常感谢!

编辑:

可测量变量包含以下数据:

[{name: weight, unit: kg}]

使用上面的架构,我根本没有收到任何错误,它就像成功一样无声,但是当我通过 CLI 检查数据库时,我没有集合。我做的事情真的很愚蠢吗?当我创建一个新的流星应用程序时,它会为我创建一个 Mongo 数据库,我假设 - 我没有忘记实际创建一个数据库或一些愚蠢的东西?

【问题讨论】:

  • 请添加measurables 的示例,其中不仅变量名可见,而且还有错误输出的摘录。到目前为止,架构看起来还不错。这似乎是输入数据的一个问题。
  • 感谢您的回复 - 我编辑了原始帖子以显示变量 console.log
  • 发生了什么,如果您将默认清理选项设置为false,它会引发错误吗?见:github.com/aldeed/simple-schema-js#set-default-cleaning-options
  • 目前不在我的开发机器上,但稍后会尝试并告诉您进展如何。

标签: arrays mongodb meteor simple-schema


【解决方案1】:

原来我很愚蠢。我发布的架构是正确的,并且完全按预期工作。问题是我在客户端和服务器目录之外的导入目录中的文件中定义了我的模式和方法。此方法文件以调用该方法的形式导入到文件中,因此在客户端上可用,但未导入到服务器中。

我猜该方法在客户端上作为存根被调用,所以我看到 console.log 被触发,但该方法没有在服务器上被调用,因此没有命中数据库。

关于新的推荐文件结构对我来说是个好教训。始终在 server/main.js 中导入服务器端代码!!! :D

感谢您的帮助,我以为我要发疯了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多