到期mongodb文档中的元素

时间:2013-05-09 07:01:38

标签: mongodb mongodb-php

注意:首次使用MongoDB。

技术:php mongodb 情形:

假设数据包含所提供的程序。文档看起来像:

{
    LocationName: 'name of the location',
    LocationAddress: 'Main street., Popular City, PC',
    LocationManager: 'Mr. Manager',
    LocationPhone: '555 555 1212',
    Programs :
             [
                 {
                 ProgramName : 'Excellence Prgram',
                 ProgramStartDate : '12-05-2012',
                 ProgramEndDate : '3-15-2013'
                 },
                 {
                 ProgramName : 'Excellence Prgram for me',
                 ProgramStartDate : '1-05-2012',
                 ProgramEndDate : '2-15-2013'
                 },
                 {
                 ProgramName : 'Excellence Prgram for three',
                 ProgramStartDate : '1-05-2012',
                 ProgramEndDate : '4-15-2013'
                 }
             ]
}

问题:

  1. 要按开始日期和结束日期查询,对集合的查询是什么?
  2. 程序按结束日期到期,新程序经常添加到每个文档中。我认为,在文档中保留过期的程序会在某些时候变得效率低下。过期的程序如何存档?
  3. 提前谢谢。

1 个答案:

答案 0 :(得分:0)

原谅我,但我讨厌给出这种答案。我会从根本上改变你存储文件的方式:

我会让文档看起来像这样:

 {
     _id : 1823098123908831809
     ProgramName : 'Excellence Prgram',
     ProgramStartDate : '12-05-2012',
     ProgramEndDate : '3-15-2013'
     Location : {
         LocationName: 'name of the location',
         LocationAddress: 'Main street., Popular City, PC',
         LocationManager: 'Mr. Manager',
         LocationPhone: '555 555 1212',
 }

您现在遇到的问题是,您可以查询具有Active程序的位置,但只提取符合您业务规则的程序将会非常棘手。

通过此reorg,您可以为集合中具有符合业务规则的日期的所有文档编写简单查询。

更改细节的位置确实变得更复杂,但这实际上是一个小用例。您经常会查询活动程序。地点很少改变管理者。

这也可以让你保持历史。如果您只更新程序相关运行的位置信息,您将拥有一份记录,表明2013年5月的卓越计划运行在Mains street的旧位置,与Manager先生(即使它现在在Front Street上运行,运行经理夫人)。