reactjs - 如何在 MongoDB 中组合 3 个查询的结果?
问题描述
我制作了以下过滤器,希望将所有 3 个$and
数组的结果组合起来,但它只匹配其中一个块。
$and
如果满足条件,如何组合从每个数组返回的结果。希望这很清楚。我不知道如何调用$and
数组。
const filter = {
$or: [
{
$and: [
{ category: req.query.category },
{ tags: req.query.subCategory },
{contentType: req.query.contentType},
req.query.searchTerm !== ""
? {
name: {
$regex: "(?i)" + req.query.searchTerm + "(?-i)",
$options: "i",
},
}
: {},
],
$and: [
{ category: req.query.category },
{ tags: req.query.subCategory },
{contentType: req.query.contentType},
req.query.searchTerm !== ""
? {
description: {
$regex: "(?i)" + req.query.searchTerm + "(?-i)",
$options: "i",
},
}
: {},
],
$and: [
{ category: req.query.category },
{ tags: req.query.subCategory },
{contentType: req.query.contentType},
req.query.searchTerm !== ""
? {
tags: {
$regex: "(?i)" + req.query.searchTerm + "(?-i)",
$options: "i",
},
}
: {},
],
},
],
};
await Content.paginate(filter, options, (err, result) => {
if (err) {
res.status(500).send(err);
} else {
res.json(result);
}
});
编辑:下面是在数据库中找到的两个条目的示例。它应该工作的方式是它应该使用category
,subCategory
和contentType
过滤掉数据库中的条目,以便我现在拥有的只是具有相同category
,subCategory
和contentType
中指定的条目req.query
,我将其称为firstFilterResult
. 从那里,我尝试在其中搜索firstFilterResult
以查看是否有具有name
、tag
或description
匹配的条目。所以基本上catgeory
,subCategory
和contentType
只是用来缩小结果的范围,以便我可以找到匹配的name
,tag
和description
. 我上面的代码并没有完全做到这一点,但这是它背后的想法,我认为我会做类似的事情,但我想我错了。
contents: [
{
tags: [
'food',
'drinks',
'card',
'account'
],
_id: '1d13ff7m6db4d5417cd608f4',
name: 'THE NAME FOR THIS PIECE OF CONTENT',
description: 'In here I will begin to talk about...',
content_id: '5dbcb998ad4144390c244093',
contentType: 'quiz',
date: '2019-06-03T04:00:00.000Z',
category: 'food',
image: 'https://IMAGE.PNG',
__v: 0
},
{
tags: [
'computer',
'laptop'
],
_id: '7d1b940b1c9d44000025db8c',
name: 'THE NAME FOR THIS PIECE OF CONTENT',
description: 'This is another description',
content_id: '5f1b963d1c9d44000055db8d',
contentType: 'tool',
date: '2019-06-03T04:00:00.000Z',
category: 'money',
image: 'https://IMAGE.PNG',
__v: 0
}
]
解决方案
我终于让它和这个一起工作了
const catFilter =
req.query.category !== "" ? { category: req.query.category } : {};
const subCatFilter =
req.query.subCategory !== "" ? { tags: req.query.subCategory } : {};
const typeFilter =
req.query.contentType !== ""
? { contentType: req.query.contentType }
: {};
const filter = {
$and: [
{
$or: [
{
name: {
$regex: req.query.searchTerm,
$options: "i",
},
},
{
description: {
$regex: req.query.searchTerm,
$options: "i",
},
},
{
tags: {
$regex: req.query.searchTerm,
$options: "i",
},
},
],
},
catFilter,
subCatFilter,
typeFilter,
],
};
推荐阅读
- python - xlrd 无法找到特殊的 IPv6 值,也无法将 CSV/txt 加载到字典列表中
- vba - 在 dotm 模板中安装具有文档打开功能的加载项
- javascript - 如何在特定元素上调用函数?
- java - ClassNotFoundException:org.apache.commons.math3.distribution.EnumeratedDistribution
- java - 检查数组项从 jsonPath 转换为 JUnit hamcrest 匹配器
- emgucv - 使用 EMGU 获取像素值的“真实世界”坐标
- java - 工厂模式是否最适合我的情况?
- c# - 来自库的 C# 十六进制字符串在智能感知和元数据中显示为“解码”
- javascript - 如何操作其值为来自 ngFor 的属性的 ngmodel
- reactjs - 如何使用 formik 和 typescript、钩子构建自定义 onSubmit 函数