插入嵌入文档并返回插入的子文档



我有一个带有嵌入文档的架构,如下所示。

const ParentSchema = new Schema({
field: String,
items: [
{
field: String,
field2: Number,
field3: Number
}
]
});

我想插入一个子文档(到项目字段(并获得最后插入的子文档。(因为我需要那个分项的objectId(。

我可以按如下方式实现它。

Parent.updateOne(
{ _id: parentId },
{
$push: {
items: {
field: String,
field2: Number,
field3: Number
}
}
}
)

但这将返回一个结果对象,而不是上次插入的子文档。为此,我可以使用另一个查询来获取最后嵌入的文档。我想要一个最佳的解决方案。

您可以使用带有选项new: truefindOneAndUpdate来获取更新的文档,然后执行类似doc.items[doc.items.length - 1]的操作来获取插入的子文档,而无需使用另一个查询:

let doc = await Parent.findOneAndUpdate(
{ _id: parentId },
{
$push: {
items: {
field: field,
field2: field2,
field3: field3
}
}
}, 
{ new: true }
);
console.log(doc.items[doc.items.length - 1]);