为什么即使更新确实发生,findOneAndUpdate为什么不返回文档?

时间:2019-05-20 08:12:39

标签: node.js mongodb

我在nodejs mongodb库上的findOneAndUpdate操作遇到问题,在这里我无法确定更新是否完成。

我编写了一个查询,该查询可以成功地按预期更新文档,但是更新后返回 value:null 。最终,我想区分三种情况:

  1. 找到文档,无法更新
  2. 找到文档并成功更新
  3. 找不到文档

    const result = await collection.findOneAndUpdate(
      { caseId: caseId, list: {$ne: userId}, $expr: {$lt:[ {$size: '$list'}, 'maxLength']} },
      { $push: {assignees: userId}})
    return result.value;
    

关于查询的一些解释:

如果

,我想将userId附加到文档的list字段中
  • caseId匹配,
  • 该用户当前不在list
  • 列表的大小小于maxLength

2 个答案:

答案 0 :(得分:0)

添加{new: true}将返回结果中更新的文档

const result = await collection.findOneAndUpdate(
  { caseId: caseId, list: {$ne: userId}, $expr: {$lt:[ {$size: '$list'}, 'maxLength']} },
  { $push: {assignees: userId}},
{new: true}
)

答案 1 :(得分:0)

添加$ set更新运算符解决了我的问题。

似乎$ push更新运算符不会触发对nodejs的更新通知。新元素被添加到集合中,但是响应将其视为未完成更新。

const result = await collection.findOneAndUpdate(
  { caseId: caseId, list: {$ne: userId}, $expr: {$lt:[ {$size: '$list'}, 'maxLength']} },
  { $push: {assignees: userId}, $set: {caseId: caseId}})
return result.value;