我有两个型号-产品和类别
CategoryId位于每个产品对象内部(在类别中指的是_id)。
类别看起来像这样:
{
"_id": ObjectId("5f3564489dc78d423f75af3d"),
"category": "OVEN",
"__v": 0
}
产品看起来像这样
{
"_id": ObjectId("5f36dd21ee0c6c27c04903cc"),
"categoryId": ObjectId("5f358007159810587d26ee5e"),
"__v": 0
}
我想要产品,并且想要在获得它们之前先做这些事情:
1。填充categoryId。
2。仅过滤出必需的categoryId。
3。执行限制,跳过。
我该怎么做?
这是我目前正在做的方式
Product.find({})
.populate({
path: "categoryId",
options: {
limit: limitProductsOnPage,
sort: { rank: 1 },
skip: (page - 1) * limitProductsOnPage
},
})
.exec(function(err, products) {
if (err) {
console.log("Error Occured", err);
}
let filteredProducts;//to Store Filtered Products
filteredProducts = products.filter(product=> { (#POINT-1)
if(product.categoryId._id.toString() == category_id){
return product;
}
});
}
这里的主要问题是我在限制和跳过之后正在过滤(#POINT-1)!而必须先进行过滤。
答案 0 :(得分:0)
我认为您可以在一个查询中完成所有操作,通过使用$ne
过滤掉特定的类别ID。做类似的事情:
Product.find({categoryId: {$ne: category_id})
.sort({ rank: 1 })
.limit(limitProductsOnPage)
.skip((page - 1)* limitProductsOnPage)
.populate("categoryId")
这应该具有所需的所需行为,尽管它不会按照所需的确切顺序进行操作。