【问题标题】:Insert into embedded document and return inserted sub document插入嵌入文档并返回插入的子文档
【发布时间】:2021-07-04 16:26:47
【问题描述】:

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

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
                }
            }
        }
)

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

【问题讨论】:

标签: node.js mongodb mongoose


【解决方案1】:

您可以使用findOneAndUpdate 和选项new: true 来获取更新的文档,然后执行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]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-26
    • 2023-04-05
    • 2014-11-07
    • 2017-04-07
    • 2012-08-29
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    相关资源
    最近更新 更多