mongodb - Mongoose-如何在填充和过滤后使用“where”子句
问题描述
我有两个模型 - 产品和类别
CategoryId 在每个产品对象内(指的是 Category 中的 _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)并跳过!而过滤必须先完成。
解决方案
我认为您可以在一个查询中完成所有这些操作,通过使用过滤掉特定的类别 ID $ne
。做类似的事情:
Product.find({categoryId: {$ne: category_id})
.sort({ rank: 1 })
.limit(limitProductsOnPage)
.skip((page - 1)* limitProductsOnPage)
.populate("categoryId")
这应该具有您想要的所需行为,尽管它不会按照您想要的确切顺序进行。
推荐阅读
- android - 想要进行firebase android嵌套查询
- javascript - javascript上的多个变量
- java - 从 Spring Boot 简单 JDBCcall 调用 PLSQL 过程时出错
- node.js - Promises:异步处理可以吗?
- c# - 从 Microsoft.Office.Interrop.Excel 读取 excel 时出错
- swift - 在其中点局部旋转 SCNNode SceneKit
- reactjs - 在大小状态上反应 setstate
- html - 禁用动态元素 -angularjs
- token - 重复的 Ganache 帐户
- javascript - 使用 window.pushState 设置 url 后,如何访问该特定链接?