2016-07-04 61 views
0

當我需要保存「文檔」時,我遇到了循環依賴問題。貓鼬中可能的循環引用

我的應用程序都是通過AngularJS接口Restfull。

在創建公司的屏幕上,您可以創建OBJECTS和SERVICES。在創建服務屏幕時,它必須關聯一個創建的對象。

問題是,創建的OBJECT尚未持續,所以我沒有_id。因此無法在SERVICE中引用它。只有當我有一個OBJECT時,我纔可以將它關聯到company.services[0].object

有什麼建議嗎?

這是我需要保存在MongoDB中。請參閱SERVICE中對OBJECT "5779f75a27f9d259248211c7"的參考。

/* 1 */ 
{ 
    "_id" : ObjectId("5749bb92bf8145c97988e4a9"), 
    "name" : "company 1", 
    "services" : [ 
     { 
      "_id" : ObjectId("5764cb2c00d00cf10c9c41c6"), 
      "description" : "service 1", 
      "object" : ObjectId("5779f75a27f9d259248211c7"), 
     } 
    ], 
    "objects" : [ 
     { 
      "_id" : ObjectId("5779f75a27f9d259248211c7"), 
      "description" : "object 1", 
     } 
    ] 
} 

這是我的架構:

var objectSchema = new mongoose.Schema({ 
    description: { 
    type: String, 
    trim: true, 
    unique: true, 
    required: 'Description is required' 
    } 
}) 

var serviceSchema = new mongoose.Schema({ 
    description: { 
    type: String, 
    trim: true, 
    required: 'Description is required' 
    }, 
    object: { 
    type: mongoose.Schema.ObjectId, 
    ref: 'Object' 
    }, 
}) 

var companySchema = new mongoose.Schema({ 
    name: { 
    type: String, 
    default: '', 
    trim: true, 
    unique: true, 
    required: 'Name is required' 
    }, 
    guarda_documentos: { 
    services: [serviceSchema], 
    objects: [objectSchema], 
    }, 
}); 

mongoose.model('Company', companySchema); 
mongoose.model('Object', objectSchema); 

回答

0

您需要先堅持你的對象,一旦做到這一點,使用返回_id到再堅持你的服務。這是一個異步過程。

// Simplified code concept 

// Create a new object 
var o = new Object() 
o.description = 'foo' 
... 

// Create a new service 
var s = new Service() 

// Save object and return it (will now have an _id) 
o.save(function(err, doc) { 

    // Add object reference to service and save 
    s.object = doc._id 
    s.save(function(err, res) { 
    // Call your controller or whatever callback here 
    }) 
}) 

在另一個注意事項中,不要使用「Object」作爲您的文檔的名稱。它已經在Javascript中定義了。

+0

問題是服務和對象是公司的子文件。 –

+0

由於您的對象是服務中的引用,爲什麼您將它作爲公司的子文檔?除非它具有此處描述的另一個目的,否則請從公司刪除對象subdoc。然後按照async:object save - > service save - > company save的相同流程進行操作 – cyberwombat