Mongoose如何自动将_id添加到集合项中数组中的对象?

kev*_*vin 4 mongoose mongodb node.js

我有一个看起来像这样的 mongo 集合:

{
    name: string
    _id: (auto set)
    items: array[
        name: string
        url: string
        items: array[
            {
                name: string,
                url: string,
                items: []
            }
        ]
    ]
}
Run Code Online (Sandbox Code Playgroud)

我正在使用findByIdAndUpdate(使用 mongoose)将一个项目添加到 items 数组中:

Menu.findByIdAndUpdate(
    req.body.parentid, 
    {
        $push: {
            items: {
                name: req.body.item.name, 
                url: req.body.item.url,
                items: []
            }
        }
    },
    {
        safe: true, 
        upsert: true, 
        new: true
    },
    function(err, model) {
        if (err !== null) {
            console.log(err);
        }
    }
);
Run Code Online (Sandbox Code Playgroud)

这工作正常,但它不会_id向插入items数组的每个对象添加。我真的需要为每个人提供一个 id。

我猜它来自使用的方法,findByIdAndUpdate因为它看起来更像是更新而不是插入。如果我的想法是正确的。

使用 mongodb 3.2.10 和 mongoose 4.7.6。

任何帮助将非常感激。谢谢。

编辑:这_id: (auto set)不是真的,它是通过 mongo 自动添加的。但只是在顶级对象。

kev*_*vin 5

在此线程中找到了解决方案:mongoDB:为添加到数组字段的每个新子项创建一个 ObjectId

基本上,添加

var ObjectID = require('mongodb').ObjectID;

然后强制创建:

$push: {
    items: {
        _id: new ObjectID(),
        name: req.body.item.name, 
        url: req.body.item.url,
        items: []
    }
}
Run Code Online (Sandbox Code Playgroud)


Asi*_*eed 0

您不需要在猫鼬模式中指定_id:(自动设置),它会自动为每个文档添加唯一的_id。