嵌套对象不会更新

时间:2016-09-03 07:54:05

标签: node.js mongodb mongoose

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方案的解决方案。这是猫鼬的工作方式吗?对于每个关系,我是否必须插入嵌套对象等所有内容?

2 个答案:

答案 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 ;

工作:

  
      
  1. 创建新的查询。
  2.   
  3. 将其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 } });

  4.   
  5. 每当您更新查询时,它都会自动更新   用户的文档。

  6.   
  7. 使用populate检索用户的查询。
  8.   

答案 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,那么有两个独立的集合,就像关系数据库一样。