Allora,我第一次使用mongoose,我决定创建2个方案:第一个代表用户,第二个代表他的查询。用户有一系列查询:
var userSchema = new mongoose.Schema({
name: String,
enquires: { type : [Enquire.schema] , "default" : [] },
});
var enquireSchema = new mongoose.Schema({
status: {type: String, 'default': 'pending'},
enquire: String,
});
我看到如果我搜索查询并更新其状态,它不会更新用户数组的相同查询,这意味着它们是不同的对象。我不想保存一系列ID,因为它与关系数据库相同,所以我只看到一个忘记查询方案而只使用User方案的解决方案。这是猫鼬的工作方式吗?对于每个关系,我是否必须插入嵌套对象等所有内容?
答案 0 :(得分:1)
我认为您应该使用references
来实现您想要实现的目标。
有关猫鼬参考和填充的更多信息,请参阅Mongoose Populate documentation.
试试这个,它可能对你有帮助。
用户架构:
var userSchema = new mongoose.Schema({
name: String,
enquires: [{ type : mongoose.Schema.Types.ObjectId , ref : 'Enquiry' }]//array of enquiries
});
var User = mongoose.model('User',userSchema );
module.exports = User;
查询架构:
var enquireSchema = new mongoose.Schema({
status: {type: String, 'default': 'pending'},
enquire: String,
});
var Enquiry = mongoose.model('Enquiry',enquireSchema );
module.exports = Enquiry ;
工作:
- 创建新的查询。
将其ID(_id)推送到用户的查询数组中。
var enquiry = new Enquiry(); enquiry.enquire = "Dummy enquiry";//set the enquiry enquiry.save(function(err,result){ if(!err){ //push 'result._id' into users enquires array } });
每当您更新查询时,它都会自动更新 用户的文档。
- 使用
醇>populate
检索用户的查询。
答案 1 :(得分:0)
您可以嵌入具有id的子文档(实体),就像文档一样,或者像普通属性一样嵌入本机数组。
我认为你的正确定义是:
var enquireSchema = new mongoose.Schema({
status: {type: String, 'default': 'pending'},
enquire: String,
});
var userSchema = new mongoose.Schema({
name: String,
enquires: { type : [enquireSchema] , "default" : [] },
});
如果在嵌入式链接中使用refs
,那么有两个独立的集合,就像关系数据库一样。