使用and条件在mongodb文档的嵌套对象中搜索特定字符串
Posted
技术标签:
【中文标题】使用and条件在mongodb文档的嵌套对象中搜索特定字符串【英文标题】:Search for specific string in a nested object in mongodb documents using and condition 【发布时间】:2022-01-19 15:12:01 【问题描述】:我正在尝试在 mongodb 中搜索包含用户输入的特定搜索字符串的文档。我试图搜索的集合名为imported_products,我的mongodb文档结构如下所示。
┃ _id: 61add3b16c9e0008e6ad325b,
┃ shop: 'someshop',
┃ shopUserData: name: 'LoTesting', email: 'vixen@yahoo.com' ,
┃ productData:
┃ title: 'Eyglo 3-in-1 Head Strap for Oculus Quest 2 with Face Silicone Cover & Controllers Grips Covers',
┃ price: 45.99,
┃ priceWithCurrency: '$45.99',
┃ images: [Array],
┃ ASIN: 'B08TWJJ3ZW',
┃ marketPlace: 'www.amazon.com',
┃ settings: [Object],
┃ shopifyProductId: 87187377131097
┃ ,
┃ created_at: 2021-12-06T09:11:13.327Z
┃ ,
┃
┃ _id: 61ae236cac749b088d427497,
┃ shop: 'shomeshop',
┃ shopUserData: name: 'LoTesting', email: 'test@gmail.com' ,
┃ productData:
┃ title: 'Xbox Series X',
┃ description: 'Amazon Prime customers will have priority access to the Xbox Series X until November 24, 2021.',
┃ price: 'price not available',
┃ priceWithCurrency: 'price not available',
┃ images: [Array],
┃ ASIN: 'B08H75RTZ8',
┃ marketPlace: 'www.amazon.com',
┃ settings: [Object],
┃ shopifyProductId: 5736818278172
┃ ,
┃ created_at: 2021-12-06T14:51:24.755Z
┃ ,
我需要的是,对于特定的商店,我需要查看该商店的所有文档以及 productData 字段的标题属性内,我需要搜索用户输入的查询字符串。所以,我需要使用 $and 条件在 title 属性中查找 shop 和匹配的查询字符串,然后我需要返回所有匹配条件的文档。
我尝试了以下但我不断得到空数组。
const regex = RegExp("/.*" + searchQuery + ".*/");
response = await db
.collection("imported_products")
.find(
$and: [
shop: shop ,
"productData.title": $regex: regex, $options: "i" ,
],
)
.toArray();
请引导我走向正确的道路。我将 koa.js 用于服务器,将 next.js 用于客户端。
【问题讨论】:
【参考方案1】:您不需要手动输入$and
,因为默认情况下所有条件都匹配。此外,您在文档 2 中将 someshop
拼错为 shomeshop
,这可能是获得空数组的原因之一。您也不需要在RegExp("/.*" + searchQuery + ".*/")
中使用.*
,因为默认情况下,如果文本匹配输入的任何部分,正则表达式将返回true 并捕获第一个匹配项。也不需要使用运算符 $regex
传递正则表达式。我的建议是改用searchQuery.replace(/\s+/g, ' ')
。下面的例子应该可以工作。
db.collection("imported_products").find(
shop: shop,
"productData.title":
$regex: searchQuery,
$options: "i"
)
可以测试查询here.
【讨论】:
以上是关于使用and条件在mongodb文档的嵌套对象中搜索特定字符串的主要内容,如果未能解决你的问题,请参考以下文章
在 MongoDB 中使用 group by、inner join 和嵌套条件进行聚合
将查询构建器条件转换为 MongoDB 操作,包括嵌套的子文档数组