问题描述
尝试更新文档(如果存在),否则创建具有相同数据的文档。我还需要使用?1dmy&urile=wcm%3apath%3a/mof_content/internet/moh/government/news+and+press+release/covid-19+report+update+227
而不是直接使用Index
来做到这一点。
在我肯定已经存在的情况下,使用它进行更新。但是在这种情况下,由于无法确定Ref
是否存在,因此会引发错误。尝试检查Ref
是否存在,但是由于Ref
失败而无法正常工作。
Get
任何帮助将不胜感激。谢谢。
解决方法
检查Ref是否存在是正确的方法,但是您应该使用q.Exists
而不是Get
(这会因您发现而失败。您也可以使用q.Let
来避免重复。类似以下内容:
q.Let({
match: q.Match(q.Index('fromUUID',request.UUID)),data: { data: request }
},q.If(
q.Exists(q.Var('match')),q.Update(q.Select('ref',q.Get(q.Var('match'))),q.Var('data')),q.Create(q.Collection('Foos',q.Var('data')))
)
)
,
您可以通过这种方式实现upsert:
Let(
{
UUID: '611c798e-24c8-11eb-adc1-0242ac120002',doc: Match('fromUUID',Var('UUID')),upsert: If(Exists(Var('doc')),Update(Select(['ref'],Get(Var('doc'))),{data:{val1:10,val2:20}}),Create(Collection('stackoverflow'),{data:{val1:1,val2:2,uuid:Var('UUID')}}))
},Var('upsert')
)
索引在集合中搜索UUID(如果存在),更新文档。如果没有,请使用UUID加上任何字段/值对创建一个新文档。
让我知道这是否是您想要的。
Luigi