javascript - 使用 Mongoose 获取新嵌入的文档

标签 javascript arrays node.js mongodb mongoose

我用它来向页面添加嵌入式文档

Page.findByIdAndUpdate(pageId, {
  $addToSet: {
    comments: {
      $each: comments
    }
  }
}, (err, page) => {
  // ...
});

当评论被添加到 Page 模型时,它们会自动获得一个 id

我想在给这些新插入的评论赋予一个 id 之后返回它们。

所以我想要类似的东西

Page.findByIdAndUpdate(pageId, {
  $addToSet: {
    comments: {
      $each: comments
    }
  }
}, (err, page) => {
  return page.newlyAddedComments();
});

我知道一种选择是在将 ID 插入数据库之前将其添加到数组 comments 中,但如果可能的话我想省略它。

最佳答案

正如@Shriram Manoharan 所说,不可能通过查找来剪切嵌入的文档。您可以使用聚合来做到这一点,但我认为它有点矫枉过正。

如果你想获取最后的文档:

在你的查找选项中使用新的(所以它返回页面变量中的更新数据)

{ new: true }

然后对返回的更新数据进行切片,只得到你需要的。 (新添加的数据将在数组的末尾)

Page.findByIdAndUpdate(pageId, {
  $addToSet: {
    comments: {
      $each: comments
    }
  }
}, { new: true }, (err, page) => {
  // Do not forget, what happend if _id is wrong?
  // if (!page) return ...; 
  return page.comments.slice(page.comments.length - comments.length - 1);
});

PS:我看到你用的是es6语法。我建议您在代码中实现 Promises。我认为它提高了阅读能力并简化了函数链接。

 Page.findByIdAndUpdate(pageId, {
      $addToSet: {
        comments: {
          $each: comments
        }
      }
    }, { new: true })
    .then(page => page.comments.slice(page.comments.length - comments.length - 1))
    .then(page => ...)
    .catch(err => ...);

关于javascript - 使用 Mongoose 获取新嵌入的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39607755/

相关文章:

javascript - Chart.js Canvas 元素在 Chrome 60 中具有负高度和宽度

sql - 返回由一个列 id 聚合并数据对齐到另一个列 id 的数据

c++ - 尝试将数据保存到数组时出现 ifstream 运行时错误

javascript - 如何将 NPM 模块与 Flask 一起使用?

javascript - 使用 Node.js 和 MongoDB 进行实时搜索

javascript - Node.js semver 中的正则表达式非捕获组

javascript - 生成随机数javascript

javascript charCodeAt - JsFiddle 和本地文件中的不同值

python - numpy einsum 获取轴置换

javascript - 如何正确阻止 Node.JS 服务器应用程序中的 IP 地址?