尝试更新文档(如果存在),否则创建具有相同数据的文档。我还需要使用?1dmy&urile=wcm%3apath%3a/mof_content/internet/moh/government/news+and+press+release/covid-19+report+update+227
而不是直接使用Index
来做到这一点。
在我肯定已经存在的情况下,使用它进行更新。但是在这种情况下,由于无法确定Ref
是否存在,因此会引发错误。尝试检查Ref
是否存在,但是由于Ref
失败而无法正常工作。
Get
任何帮助将不胜感激。谢谢。
答案 0 :(得分:2)
检查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')))
)
)
答案 1 :(得分:0)
您可以通过这种方式实现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