我有一个包含一些文档的集合,每个文档都有一个对象列表,这些对象表示带有关键字的时期的时间间隔。我想更新右文档中每个对象的间隔的最终值,其中结束值大于某个值。如果什么都无法更新,我想插入一个新间隔,将开始和结束作为新值,并使用查询中使用的关键字。
我正在使用nifi执行此任务和更新块,同时启用了upsert。我也可以使用聚合,但是应该可以通过upsert进行聚合。
这就是我现在所拥有的
QUERY
{
"_id":"docid",
"thearray.keyword": "red",
"thearray.end": {$gte :minUpdatable}
}
,并将其作为更新正文:
UPDATE BODY
{
"thearray.$[].end": valueToUpdate,
"$setOnInsert":{"$push": {"thearray":{"keyword":"red","start":valueToUpdate,"end":valueToUpdate}}}
}
}
这是文档数据结构: 初始状态
{
_id:"docid",
otherInfo:"",
thearray:[
{keyword:"red",start:8,end:15},
{keyword:"blue",start:8,end:15},
{keyword:"red",start:8,end:9},
{keyword:"red",start:9,end:16},
...
]
}
示例1:在这种情况下,应从初始状态开始,以“ docid”作为文档,以“ red”作为关键字,以12作为可更新的最低最终值(minUpdatable),以22作为设置文档的值进行更新变成类似
{
_id:"docid",
otherInfo:"",
thearray:[
{keyword:"red",start:8,end:22},
{keyword:"blue",start:8,end:15},
{keyword:"red",start:8,end:9},
{keyword:"red",start:9,end:22},
...
]
}
示例2:在相同情况下,从初始状态开始,应以“ docid”作为文档,以“ red”作为关键字,以33为可能更新的下限值,以39作为设置文档的值进行更新诸如此类的内容(或导致无法更新的任何查询):
{
_id:"docid",
otherInfo:"",
thearray:[
{keyword:"red",start:8,end:15},
{keyword:"blue",start:8,end:15},
{keyword:"red",start:8,end:9},
{keyword:"red",start:9,end:16},
...,
{keyword:"red",start:33,end:33}
]
}