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

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

将注释添加到Page模型后,会自动为其提供id

在给这些新插入的注释赋予ID后,我想返回这些注释。

所以我想要像
Page.findByIdAndUpdate(pageId, {
  $addToSet: {
    comments: {
      $each: comments
    }
  }
}, (err, page) => {
  return page.newlyAddedComments();
});

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

最佳答案

就像@Shriram Manoharan所说的那样,无法通过查找来剪切嵌入式文档。您可以使用汇总来完成此操作,但我认为这过于夸大了。

如果要获取最后的文件:

在您的find选项中使用new(因此它将返回page变量中的更新数据)

{ new: true }

然后对返回的更新数据进行 slice ,以仅获得所需的内容。 (新添加的数据将在数组的末尾)
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/

10-09 17:53
查看更多