比较和更新MongoDB中的后续对象

问题描述

我必须从关系型数据库切换到Nosql数据库,但是我对MongoDB仍然不太自信。我的数据库由工作合同组成,并按每个人分组。但是,需要检查条目。更准确地说,每个合同都存储为带有亲戚信息(例如,开始日期,结束日期,雇主等)的对象。合同存储在字段“ ord_id”之后,该字段实质上表示将数据插入原始数据库(.csv表)的一种顺序。 我想比较每个人的后续合同,并在必要时进行一些调整。例如,如果下一个合同的开始日期早于上一个合同的结束日期,则应更新前一个合同的结束日期并将其设置为等于下一个合同的开始日期。基本上,工作合同的期限不应重叠。 在下面的示例中,我显示了两名工人,他们各自的合同在“合同”字段中分组。但是,对于第一个工人,其第二份合同的结束日期与第三份合同的开始日期有重叠。

{
    "_id" : ObjectId("5ea995662a40c63b14266071"),"worker" : "1809871","contratcs" : [
             {
               "employer" : "2116096","start" : ISODate("2018-01-11T01:00:00.000+01:00"),"end" : ISODate("2018-01-12T01:00:00.000+01:00"),"ord_id" : 0
             },{
               "employer" : "2116096","start" : ISODate("2018-01-13T01:00:00.000+01:00"),"end" : ISODate("2018-02-30T01:00:00.000+01:00"),// The end date of this contract is higher than the start date of the following one; hence,I should set it equal to the start date of the next one. 
               "ord_id" : 1
             },{
               "employer" : "2198012","start" : ISODate("2018-02-25T01:00:00.000+01:00"),"end" : ISODate("2019-01-01T01:00:00.000+01:00"),"ord_id" : 2
             },]
},{
    "_id" : ObjectId("5ea995662a40c63b14266072"),"worker" : "1967652","contratcs" : [
             {
               "employer" : "2345690","start" : ISODate("2020-01-01T01:00:00.000+01:00"),"end" : ISODate("2020-01-3012T01:00:00.000+01:00"),"ord_id" : 3
             },{
               "employer" : "2347790","start" : ISODate("2020-02-01T01:00:00.000+01:00"),"end" : ISODate("2020-03-08T01:00:00.000+01:00"),"ord_id" : 4
             }
         ]
}

我已经用一种笨拙而不有效的方式实现了目标,而没有为每个人分组合同(我将原始数据库中的每个特定合同都视为一个不同的文档),并且将每个合同与$lookup函数链接在一起其后续(与同一工作人员匹配),然后相应地更新日期。当然有更好的方法。预先感谢您提出任何建议。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...