Sails JS 复杂的多对多关联
Sails JS complex many to many association
假设我有三个模型文件 author、article 和 publications
我的model.js如下
//author.js
attributes : {
name : 'string',
articles : {
collection : 'article',
via : 'authors'
}
}
//article.js
attributes : {
name : 'string',
authors : {
collection : 'author',
via : 'articles'
},
publication : {
model : 'publication'
}
}
//publication.js
attributes : {
name : 'string',
articles : {
collection : 'article',
via : 'publication'
}
}
从上面的关联中,如果我通过他的 ID 获取作者,它将 return 作者详细信息,然后是他写的文章,我还想要的是文章必须显示它拥有的关联与出版模式。我无法获得任何建议。
我尝试了 sails 文档,但在那里我只能找到一层关联
我正在使用 mongodb 作为我的数据库
提前致谢
抱歉这么说,但现在还没有办法在单个数据库查询中完成。您可以在两个或多个数据库查询中执行此操作。例子是这样的。
Author
.findOne(2)
.populate('articles')
.exec(function (err, itemPost){
// some error handling
async.map(itemPost.articles,
function (article, callback){
Article
.findOne(article.id)
.populateAll()
.exec(function (errArticles, articleItem){
if(errArticles){return callback(errArticles)};
callback(null, articleItem);
});
},
function (errFromIterator, results){
if(errFromIterator){res.serverError()};
var itemPostToJSON = itemPost.toJSON();
itemPostToJSON.comments = results;
var clone = _.clone(itemPostToJSON);
res.send(clone);
}
)
});
看起来人们已经对这个问题进行了很多讨论。我给你一个他们的讨论link。我的解决方案也来自那里。希望对你有帮助。
[N. B. : 我没有 运行 这个代码。所以不能说他们是不是错误。看起来还可以,就转给你了。]
假设我有三个模型文件 author、article 和 publications
我的model.js如下
//author.js
attributes : {
name : 'string',
articles : {
collection : 'article',
via : 'authors'
}
}
//article.js
attributes : {
name : 'string',
authors : {
collection : 'author',
via : 'articles'
},
publication : {
model : 'publication'
}
}
//publication.js
attributes : {
name : 'string',
articles : {
collection : 'article',
via : 'publication'
}
}
从上面的关联中,如果我通过他的 ID 获取作者,它将 return 作者详细信息,然后是他写的文章,我还想要的是文章必须显示它拥有的关联与出版模式。我无法获得任何建议。
我尝试了 sails 文档,但在那里我只能找到一层关联
我正在使用 mongodb 作为我的数据库
提前致谢
抱歉这么说,但现在还没有办法在单个数据库查询中完成。您可以在两个或多个数据库查询中执行此操作。例子是这样的。
Author
.findOne(2)
.populate('articles')
.exec(function (err, itemPost){
// some error handling
async.map(itemPost.articles,
function (article, callback){
Article
.findOne(article.id)
.populateAll()
.exec(function (errArticles, articleItem){
if(errArticles){return callback(errArticles)};
callback(null, articleItem);
});
},
function (errFromIterator, results){
if(errFromIterator){res.serverError()};
var itemPostToJSON = itemPost.toJSON();
itemPostToJSON.comments = results;
var clone = _.clone(itemPostToJSON);
res.send(clone);
}
)
});
看起来人们已经对这个问题进行了很多讨论。我给你一个他们的讨论link。我的解决方案也来自那里。希望对你有帮助。
[N. B. : 我没有 运行 这个代码。所以不能说他们是不是错误。看起来还可以,就转给你了。]