0

我有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 将该子对象 $push 到主集合中。但是,当我从列表中删除一个子对象时,我还必须删除原始子对象。还有另一种方法吗?所以我只需要更改一个子对象,而不必更改现在位于主对象内的子对象和原始子对象。

4

1 回答 1

0

好吧,我发现了如何做到这一点。它更适合我的应用程序使用嵌入式 sub 而不是拥有另一个 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();
    });
};
于 2013-08-16T12:18:35.033 回答