前端开发

javascript – 如何使用Node.js将对象添加到MongoDB中另一个集合中的集合

2021-01-16 01:17:06 阅读数 4743 收藏 0
我知道如何使用Node.js在MongoDB中将对象添加到集合中,例如:
router.post('/addProduct',function (req,res) {
    Partner.findByIdAndUpdate({ _id: req.body.partnerId },{ $push: { "products": { name: req.body.dataProduct.name } } },{ safe: true },function (err,response) {
        if (err) throw err;
        res.json(response);
    });
});

但如果产品会是另一张桌子怎么办?我怎样才能简单地在那里添加对象?

让我们说这是我的架构:

var partnerSchema = new mongoose.Schema({
    name: String,products: [
        {
            name: String,campaignList: [
                {
                    name: String,type: String,startDate: Date,endDate: Date,paymentMethod: String,partnerPayout: Number,ourPayout: Number
                }
            ]
        }]
});

每个合作伙伴和产品中的ID都是默认值._id例如. partner._id和product._id.这就是为什么不在上面的架构中.然而我将它们从FrontEnd发送到BackEnd作为req.parameter – 通常是我想说的肯定:)

解决方法

你最好的选择是定义Schema&单独为广告系列建模,并使用_id通过引用将其添加到合作伙伴
var partnerSchema = new mongoose.Schema({
    name: String,campaignList: [
                { type : mongoose.Schema.Types.ObjectId,ref : 'campaignModel' }
            ]
        }]
});
var campaignSchema = new mongoose.Schema({
  name: String,ourPayout: Number
});
var campaignModel = mongoose.model('campaignModel',campaignSchema);
var partnerModel = mongoose.model('partnerSchema',partnerSchema);

一个好的做法是查找您尝试嵌套半复杂数据的时间,或者具有两个或三个以上键的对象,并将它们提取到自己的集合中.它不仅可以更轻松地搜索这些文档,还可以更轻松地将它们与其他对象结合使用.

一定要在查询期间调用.populate(),以便MongoDB知道嵌套来自其他集合的文档,否则,你将只有一个ObjectId数组.