无论雇主是否存在,我都想为相应的用户创建雇主条目。我试过用这两个:
employer.update(userIdQuery, employerData, {upsert: true})
employer.findAndModify(userIdQuery, [], employerData, {upsert: true})
这两种方法都有效,但我得到的结果在插入和更新之间是不一致的。例如,如果记录与findAndModify
不存在,我会回来:
{ value: null,
lastErrorObject:
{ updatedExisting: false,
n: 1,
upserted: 5668620a12fce919dba35275 },
ok: 1 }
如果记录已存在,我会
{ value:
{ _id: 5668602212fce919dba35274,
userId: 566860228461901b42d2a06d,
org: 'The Org' },
lastErrorObject: { updatedExisting: true, n: 1 },
ok: 1 }
我想要做的是在插入/更新完成后返回雇主价值。
我可以通过尝试查找雇主价值并插入它(如果它不存在),然后以其他方式获取新值,但我试图避免额外格式化数据和任何额外的查询,如果我能做到这一点
有没有一致的方法来进行upsert并以相同的格式获取插入/更新的值?
答案 0 :(得分:0)
您可以使用从写入返回的ops
值来获取书面文档。这些仅针对insertOne
,insertMany
和replaceOne
返回,但replaceOne
方法可以完美地用于此。
employer.replaceOne(userIdQuery, employerData, {upsert: true})
这会返回类似于insertOne
的结果,其中包含ops
,其中包含新文档(无论是插入还是更新)。