使用MongoDB查询在字符串中搜索多个单词/子字符串?
我有一个模型,如图所示使用MongoDB查询在字符串中搜索多个单词/子字符串?,mongodb,mongoose,mongodb-query,Mongodb,Mongoose,Mongodb Query,我有一个模型,如图所示 [ {"_id": "1", "Title": "boat test"}, {"_id": "2", "Title": "mobiles and extras"} ] Query\u String=“boat”//应返回[{u id:“1”,“Title:“boat test”}] Query\u
[
{"_id": "1", "Title": "boat test"},
{"_id": "2", "Title": "mobiles and extras"}
]
Query\u String=“boat”
//应返回[{u id:“1”,“Title:“boat test”}]
Query\u String=“boat te”
//应返回[{“\u id”:“1”,“Title”:“boat test”}]
Query\u String=“mobiles”
//应返回[{“\u id”:“2”,“Title”:“mobiles and extras”}]
Query\u String=“mob”
//应返回[{“\u id”:“2”,“Title”:“mobiles and extra”}]
Query\u String=“boat mobile”
//应该返回[{u id:“1”,“Title:“boat test”},{{u id:“2”,“Title:“mobiles and extra”}]
我的查询是获取其“Title”字段在给定查询字符串中包含任何单词的所有产品
我尝试了这个方法,但这只适用于第一个查询字符串为“boat”的情况
有两种方法 使用javascript RegExp:
- 按空格拆分字符串并生成数组,映射以将字符串转换为正则表达式
- 请尝试在$in查询表达式中包含正则表达式,您只能使用JavaScript正则表达式对象(即/pattern/)。例如:
$or
条件和$regex
- 按空格拆分字符串并制作数组,映射到单独的条件准备数组
- 检查
$或
条件
我试过了,结果非常好<代码>让TitleFilter=req.body.Title.split(“”.map((s)=>{return{Title:{$regex:s,$options:“i”,},};})
const product=wait Products.find({$or:TitleFilter})代码>//这返回了预期的输出,但如果我还想检查同一查询的类别字段,该怎么办。。。。例如,现在我只检查标题字段。如果我想同时检查标题和类别字段,该怎么办;对于多个字段。我已使用类别条件更新了答案。我使用第二种方法解决我的问题。它工作得非常好。谢谢我们也可以在这里使用spread运算符来连接两个Arar,如下所示[…TitleFilter,…CategoryFilter]
完美答案!
const { Products } = require("../models/Products");
Products.find({
Title: {
$regex: `.*${Query_String}.*`,
$options: "i",
},
})
let QString = Query_String.split(" ").map(s => new RegExp(s));
Products.find({
$or: [
{ Title: { $in: QString } },
// more fields if needed
{ Category: { $in: QString } }
]
});
let QStringTitle = Query_String.split(" ").map(s => {
return {
{
Title: {
$regex: s,
$options: "i"
}
}
};
});
let QStringCategory = Query_String.split(" ").map(s => {
return {
{
Category: {
$regex: s,
$options: "i"
}
}
};
});
Products.find({ $or: QStringTitle.concat(QStringCategory) });