有没有办法用 mongodb 控制 gorm 中的加载关系?
Is there a way to control loading relations in gorm with mongodb?
我正在使用 grails 3 和 mongo 构建 REST api。当我需要编组具有更大深度的 object 图时遇到问题。
我有以下域:
class Category extends Resource {
/* other fields */
Category parent
}
class Product extends Resource {
/* other fields */
List<Category> categories
static hasMany = [categories: Category]
}
我在数据库中有以下结构(为了便于理解而简化):
categories:
{name: 'cat1'}
{name: 'cat2', parent: 'cat3'}
{name: 'cat3', parent: 'cat4'}
{name: 'cat4', parent: 'cat5'}
{name: 'cat5'}
product:
{categories: ['cat1', 'cat2']}
我在创建控制器时从 RestfullController 扩展。我希望能够获得产品并在返回的 json.
中包含 parents 的类别
我得到以下结果:
/product/${id}
{
id: '...',
categories: [{
id: '...',
name: 'cat1'
}, {
id: '...',
name: 'cat2',
parent: { id: '...' }
}]
}
/category/cat2id
{
id: '...',
name: 'cat2',
parent: { id: '...' }
}
/category
[{
id: '...',
name: 'cat1'
},{
id: '...',
name: 'cat5'
},{
id: '...',
name: 'cat4',
parent: {
id: '...',
name: 'cat5'
}
},{
id: '...',
name: 'cat3',
parent: {
id: '...',
name: 'cat4',
parent: {
id: '...',
name: 'cat5'
}
}
},{
id: '...',
name: 'cat2',
parent: {
id: '...',
name: 'cat3',
parent: {
id: '...',
name: 'cat4',
parent: {
id: '...',
name: 'cat5'
}
}
}
}]
为什么 Category.list() 会加载整个类别 object 图,而 Category.get()、Product.get() 和 Product.list() 会不加载吗?有没有办法控制这种行为?
Grails 的工作方式是它只会呈现已经从数据库中加载的关联,这就是为什么您会呈现一些关联而另一些不会呈现的原因。
除了编写您自己的编组器之外,没有内置的方法来控制此行为。参见 http://grails.github.io/grails-doc/latest/guide/webServices.html#renderers
我正在使用 grails 3 和 mongo 构建 REST api。当我需要编组具有更大深度的 object 图时遇到问题。
我有以下域:
class Category extends Resource {
/* other fields */
Category parent
}
class Product extends Resource {
/* other fields */
List<Category> categories
static hasMany = [categories: Category]
}
我在数据库中有以下结构(为了便于理解而简化):
categories:
{name: 'cat1'}
{name: 'cat2', parent: 'cat3'}
{name: 'cat3', parent: 'cat4'}
{name: 'cat4', parent: 'cat5'}
{name: 'cat5'}
product:
{categories: ['cat1', 'cat2']}
我在创建控制器时从 RestfullController 扩展。我希望能够获得产品并在返回的 json.
中包含 parents 的类别我得到以下结果:
/product/${id}
{
id: '...',
categories: [{
id: '...',
name: 'cat1'
}, {
id: '...',
name: 'cat2',
parent: { id: '...' }
}]
}
/category/cat2id
{
id: '...',
name: 'cat2',
parent: { id: '...' }
}
/category
[{
id: '...',
name: 'cat1'
},{
id: '...',
name: 'cat5'
},{
id: '...',
name: 'cat4',
parent: {
id: '...',
name: 'cat5'
}
},{
id: '...',
name: 'cat3',
parent: {
id: '...',
name: 'cat4',
parent: {
id: '...',
name: 'cat5'
}
}
},{
id: '...',
name: 'cat2',
parent: {
id: '...',
name: 'cat3',
parent: {
id: '...',
name: 'cat4',
parent: {
id: '...',
name: 'cat5'
}
}
}
}]
为什么 Category.list() 会加载整个类别 object 图,而 Category.get()、Product.get() 和 Product.list() 会不加载吗?有没有办法控制这种行为?
Grails 的工作方式是它只会呈现已经从数据库中加载的关联,这就是为什么您会呈现一些关联而另一些不会呈现的原因。
除了编写您自己的编组器之外,没有内置的方法来控制此行为。参见 http://grails.github.io/grails-doc/latest/guide/webServices.html#renderers