如何使用具有高动态模式MongoDB的Mongoose

时间:2014-12-03 08:38:59

标签: mongodb mongoose

我想更改数据库的架构。现在它就像:

{
   "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? 我不知道有什么缺点吗?

1 个答案:

答案 0 :(得分:3)

如果你想坚持使用第二种格式,那么它就是'最好将[{3}}用于disp字段:

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

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

  

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

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

  

或者将strict设置为false更好吗?

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

  

我不知道有什么缺点吗?

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

  • 您将失去在dist字段上拥有架构的所有优势;
  • dist字段
  • 上创建索引是不可能的
  • 您无法根据日期(而不是BatScream)执行Mixed Schema Type

但这并不意味着你的想法很糟糕。使用日期作为键的优点可以克服所有缺点。