在MongoDB中创建新记录时,如何将多个项目保存到数组字段?

时间:2014-08-12 04:34:21

标签: node.js mongodb express mongoose

我有以下架构用于"群组"采集。我希望能够创建此记录并推送任意数量的"成员"首次创建时,该组。我无法得到"成员"保存记录时填充的字段。保存所有其他字段没有问题。

var groupSchema = mongoose.Schema({
    creator : String,
    name : String,
    members: [{
        type: String,
        ref: 'User'
    }],
    created : {
        type: Date,
       default: Date.now
    }
});

app.post('/create-group', function(req, res) {
    //req.body.users = ['12345', '23456', '34567'] for example
    var group = new Group({
        name : req.body.group_name,
        creator : req.user._id,
        members: {$push: req.body.users}
    });
    group.save(function (err, data) {
        if (!err) {
            return res.json(data);
        }
    });
});

即使所有其他字段都已正确保存,也不会在"成员"中存储任何结果。我做错了什么?

2 个答案:

答案 0 :(得分:0)

修改

在您的架构中编写ref:“User”时,这意味着您必须提供User架构而不是字符串或整数。如果你只想要一个字符串数组,你可以简单地使用[String]。

根据文档,您必须使用objectID http://mongoosejs.com/docs/populate.html

members: [{ type: Schema.Types.ObjectId, ref: 'User' }]

在上面提供的链接中,您可以查看如何保存论坛以及添加任意数量的成员。

答案 1 :(得分:0)

members: [{ type: Schema.Types.ObjectId, ref: 'User' }]

正如Su4p指出的那样。不要担心req.body.users包含字符串而不是ObjectIds。 mongoose会将字符串转换为objectID。 还有另一个错误,

        members: {$push: req.body.users}

应该是

        members: req.body.users

$push是一个更新运算符。它不适用于分配数组。