我用它来将嵌入式文档添加到页面
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/