Sails JS - 深度填充相同的模型和属性
Sails JS - Deep populate of the same model and attribute
让我稍微解释一下。这个想法是有类别,每个类别也可以有一个父类别和一个子类别,但我们不知道这棵树能走多深。例如:
->Clothes
-->Men
--->Kids
---->Newborns
----->Etc, etc
-->Women
-->Unisex
所以我认为我的 Category.js 模型可以具有这些属性:
module.exports = {
attributes: {
name: {
type: 'string',
required: true,
unique: true
},
products: {
collection: 'product',
via: 'category'
},
parentCategory: {
model: 'category'
},
subCategories: {
collection: 'category',
via: 'parentCategory'
}
}
};
当我获得所有类别时:
Category.find({}).populate('subCategories').exec(........
我得到了所有类别及其子类别的列表,但我也想要子类别的子类别,就像我之前写的树层次结构一样,但我得到的是
衣服 { 子类别:[男士:{},女士:{},男女通用:{}] }
男士{ .....
但在衣服里面,我有男人,这是正确的。但是现在在这个 Men 对象里面我没有 "Kids".
我说清楚了吗?
Populate 方法仅适用于一个级别(目前),因此您不能填充对象然后在内部填充另一个级别。我有一个类似的功能,我找到并编写了这段代码,也许它可以帮助你:
return Object.findOne({
id: id
}).populateAll().then(function (result) {
var otherObject= otherObject.find(result.id).then(function (otherResult) {
return otherResult;
});
return [result, otherResult];
}).spread(function (house, otherResult) {
result= result.toObject();
result.otherResult= otherResult;
return result;
});
让我稍微解释一下。这个想法是有类别,每个类别也可以有一个父类别和一个子类别,但我们不知道这棵树能走多深。例如:
->Clothes
-->Men
--->Kids
---->Newborns
----->Etc, etc
-->Women
-->Unisex
所以我认为我的 Category.js 模型可以具有这些属性:
module.exports = {
attributes: {
name: {
type: 'string',
required: true,
unique: true
},
products: {
collection: 'product',
via: 'category'
},
parentCategory: {
model: 'category'
},
subCategories: {
collection: 'category',
via: 'parentCategory'
}
}
};
当我获得所有类别时:
Category.find({}).populate('subCategories').exec(........
我得到了所有类别及其子类别的列表,但我也想要子类别的子类别,就像我之前写的树层次结构一样,但我得到的是
衣服 { 子类别:[男士:{},女士:{},男女通用:{}] } 男士{ .....
但在衣服里面,我有男人,这是正确的。但是现在在这个 Men 对象里面我没有 "Kids".
我说清楚了吗?
Populate 方法仅适用于一个级别(目前),因此您不能填充对象然后在内部填充另一个级别。我有一个类似的功能,我找到并编写了这段代码,也许它可以帮助你:
return Object.findOne({
id: id
}).populateAll().then(function (result) {
var otherObject= otherObject.find(result.id).then(function (otherResult) {
return otherResult;
});
return [result, otherResult];
}).spread(function (house, otherResult) {
result= result.toObject();
result.otherResult= otherResult;
return result;
});