当我需要保存文档时,我遇到循环依赖问题。
我的应用程序是通过AngularJS的界面Restfull。
在创建公司的屏幕上,您可以创建对象和服务。在创建“服务”屏幕时,它必须关联创建的OBJECT。
问题是创建的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 :(得分: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
})
})
另一方面,请注意不要使用"对象"作为你的文档的名称。它已在Javascript中定义。