我知道如何使用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数组.