我有两个系列,
优惠是产品的子代,通过product
密钥相关联。产品通过user
密钥与用户相关:
products : function(){
return Products.find({'user': Meteor.userId()}).fetch();
},
offers: function(){
return Offers.find({product: this._id}).fetch();
}
HTML:
{{#each products}}
{{#each offers}}
{{/each}}
{{/each}}
我想在mongodb中应用offers.price
当我申请时,它只在每个产品内进行分类
如何在所有产品中按Offers.price
排序?
答案 0 :(得分:1)
您不能拥有两个集合的嵌套循环,并按内部排序:
{{#each products}}
{{#each offers}}
{{/each}}
{{/each}}
至少在一般情况下,这是不可能的,因为(通常)产品" A"可以提供最高价格,也可以是最低价格。
您可以做的是创建一个连接的产品和商品数组,然后按价格键对该数组进行排序。由于优惠是产品的子代,您可以这样做:
Template.myTemplate.helpers({
joinedArray() {
let array = [];
Products.find({ 'user': Meteor.userId() }).forEach(p => {
Offers.find({ product: p._id }).forEach(o => {
array.push({ productName: p.name, offerName: o.name, offerPrice: o.price });
});
});
return _.sortBy(array,'offerPrice');
}
});
使用下划线sortBy功能完成排序。
在array.push
行中,我对您的馆藏中存在哪些键,您希望在助手中返回哪些键以及如何命名这些键进行了一些假设。在这种情况下,我假设你想按价格上涨的顺序排序。如果你想要相反的顺序,那么你可以.reverse()。
如果您的Offers
集合被非规范化并包含Products
中的相关字段,那么您可以直接对该集合进行排序,并在一个循环中使用其中的密钥。
答案 1 :(得分:0)
用这样的东西排序:
return Offers.find({}, {sort: {price: 1}});
但我不知道你到底想要做什么。