如何使用express和mongodb处理node.js中的对象数组

时间:2013-08-07 09:56:54

标签: node.js mongodb express

我有2个收藏,

var Sub= new Schema({
    content: String,
    date: Date
});

var Main= new Schema({
    subs: [Sub]
});

我正在创建和删除这种方式:

exports.create = function(req, res) {
    new Sub({
        content: req.body.content
    }).save(function(err, sub) {
        Main.update({_id: req.body.mid}, {$push: {subs: sub}}, {upsert: true}, function(err, mmain) {
            res.redirect('/' + req.body.mid);
        });
    });
};
exports.destroy = function(req, res) {
    Sub.findOne({_id: req.params.sid}, function(err, sub) {
        Main.update({_id: req.params.mid}, {$pull: {subs: sub}}, function(err, mmain) {
            sub.remove(function(err, sub) {
                res.redirect('/' + req.params.mid);
            });
        });
    });
};

所以基本上我首先创建一个子对象,然后我使用.update来将该子对象推送到主集合中。但是,当我从列表中删除一个子对象时,我还必须删除原始子对象。还有另一种方法吗?因此,我只需要更改一个子对象,而不必更改现在位于Main对象内的子对象以及原始子对象。

1 个答案:

答案 0 :(得分:0)

好吧,我发现了怎么做。它非常适合我的应用程序使用嵌入式子而不是拥有另一个Schema和集合所以我删除了Sub集合并编辑了Main集合:

var Main= new Schema({
          subs: [
                 content: String,
                 date: Date
                ] 
          });


exports.create = function(req, res) {
    Main.update({_id: req.body.mid}, {$push: {subs: {content: req.body.content}}}, {upsert: true},function(err, main) {
        res.end();
    });
};