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

时间:2017-01-16 16:07:07

标签: node.js mongodb mongoose

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

{
    name: string
    _id: (auto set)
    items: array[
        name: string
        url: string
        items: array[
            {
                name: string,
                url: string,
                items: []
            }
        ]
    ]
}

我使用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);
        }
    }
);

这样可以正常工作,但它不会为插入_id数组的每个对象添加items。我真的需要每个人的身份证。

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

使用mongodb 3.2.10和mongoose 4.7.6。

任何帮助都会非常感激。 感谢。

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

2 个答案:

答案 0 :(得分:1)

在此主题中找到解决方案:mongoDB : Creating An ObjectId For Each New Child Added To The Array Field

基本上,添加了

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

然后强制创建:

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

答案 1 :(得分:0)

你不需要在mongoose架构中sepcify _id :(自动设置)它会自动为每个文档添加唯一的_id。