将站点配置存储为 Mongoose 模型

Est*_*ask 6 mongoose mongodb node.js mongoose-schema

我有网站配置(当前存储为 JSON 文件),我想将它移动到 MongoDB,并且可能使用 Mongoose 来处理读写操作并通过模式执行验证。

配置是一个键数有限的对象,类似于:

{
  siteOffline: false,
  storeOffline: false,
  priceMultipliers: {
    a1: 0.96
    a2: 0.85
  },
  ...
}
Run Code Online (Sandbox Code Playgroud)

它应该是一个包含键值条目的集合吗?不确定在这种情况下如何强制执行 Mongoose 模式。

它应该是一个包含单个文档的集合吗?不确定如何保证一次只有一个文档。

还有其他选择吗?

xSh*_*ase 5

好的,一次做一件事:

如果你想使用猫鼬,你应该把你的完整配置作为一个文件:

var siteConfig = new Schema({
  siteOffline: Boolean,
  storeOffline: Boolean,
  priceMultipliers: {
    a1: Number
    a2: Number
  } 
});
Run Code Online (Sandbox Code Playgroud)

然后,如果你想要一个只有一个文档的集合,你可以使用MongoDB 上限集合

我建议你通过 Mongoose 允许的多个选项,在这里

您的单文档集合的架构将类似于:

   var config = new Schema({
      siteOffline: Boolean,
      storeOffline: Boolean,
      priceMultipliers: {
        a1: Number
        a2: Number
      } 
    }, { 
      collection:'config',
      capped: { size: 1024, max: 1} 
    });
Run Code Online (Sandbox Code Playgroud)

虽然只有一个文档的“集合”有点讽刺:)

另一个可能更适合您的“黑客”解决方案是使用安全字段(您无法更改其值),并在该字段上添加唯一索引。阅读本文了解更多信息该字段可能存在于文档中,但不存在于模型(虚拟)中。同样,这很hacky,但无论如何你的用例有点奇怪:)