【问题标题】:How to use Mongoose with a highly dynamic schema MongoDB如何将 Mongoose 与高度动态的模式 MongoDB 一起使用
【发布时间】:2015-01-31 17:45:42
【问题描述】:

我想更改我的数据库的架构。现在是这样的:

{
   "disp":[
        {
            "quantity":1,
            "date":20141109
        },
        {
            "quantity":1,
            "date":20141110
        },
        {
            "quantity":1,
            "date":20141111
        }
    ]
}

“日期”是唯一的并被索引。 像这样的模式对我来说有很大的缺点。我无法以原子方式更新多个日期的“数量”,因此我必须在我的应用中实现 Two Phase Commits

我正在测试替代架构,我认为这个可以满足我的需求

{
   "disp":{
        "20141109": {
            "quantity":1
        },
        "20141110": {
            "quantity":1
        },
        "20141111": {
            "quantity":1
        }
    }
}

通过这种方式,我可以自动更新多个日期的数量,但我想知道如何使用 mongoose 模式进行管理,因为可以以高度动态的方式添加和删除日期。 在集合中将有很多文档,其中指定了不同日期的数量 前任。一个文档只能有几个日期的数量,而另一个文档可以有几年的数量

添加/删除字段强制每个文档都有一个日期字段(默认为 0 数量)更好还是将strict 设置为 false 更好? 有什么我不知道的缺点吗?

【问题讨论】:

  • 您的第二种模式格式无效。数组只能保存文档或值。你是说disp:{...} 吗?
  • @BatScream 是的,我复制并粘贴时没有仔细检查。谢谢指出
  • 如果你有第二种格式,你不能根据日期执行聚合操作。最好不要有任何动态变量并且可能在查询选择器中用作键的东西。

标签: mongodb mongoose


【解决方案1】:

如果您想坚持使用第二种格式,那么最好将Mixed Schema Type 用于您的disp 字段:

var my_schema = new Schema({ disp: {} });

var my_schema = new Schema({ disp: Schema.Types.Mixed });

最好是添加/删除字段,强制每个文档都有一个 日期字段(默认为 0 数量)?

这不是一个好主意,因为您需要在架构中明确指定所有可能的日期。

或者将strict设置为false更好?

我不建议这样做,因为它会影响整个架构,而不仅仅是 dist 字段。

有什么我不知道的缺点吗?

以下是我可以看到的一些缺点:

  • 您将失去在 dist 字段上使用架构的所有优势;
  • 不可能在dist 字段上创建索引;
  • 您将无法根据日期执行aggregate operations(感谢 BatScream)。

但这并不意味着你的想法不好。使用日期作为键的优点可能会克服所有缺点。

【讨论】:

    猜你喜欢
    • 2022-12-04
    • 2019-01-06
    • 2021-01-02
    • 2015-07-19
    • 2018-05-19
    • 1970-01-01
    • 2022-01-24
    • 2021-07-26
    • 1970-01-01
    相关资源
    最近更新 更多