Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 不带正则表达式的Mongoose部分字段搜索_Search_Mongoose - Fatal编程技术网

Search 不带正则表达式的Mongoose部分字段搜索

Search 不带正则表达式的Mongoose部分字段搜索,search,mongoose,Search,Mongoose,假设我有这个模式: var mongoose = require("mongoose") var userSchema = new mongoose.Schema({ name: {type: String}, // other fields }, { collation: { locale: "en_US", strength: 1 } }); 我使用排序规则,因此搜索不区分大小写 那么假设我有一个名为“Dave”的文档 然后,我寻找它,但没有写下整个单词 var userLis

假设我有这个模式:

var mongoose = require("mongoose")
var userSchema = new mongoose.Schema({
   name: {type: String},
   // other fields
}, { collation: { locale: "en_US", strength: 1 } });
我使用排序规则,因此搜索不区分大小写

那么假设我有一个名为“Dave”的文档

然后,我寻找它,但没有写下整个单词

var userList = {
   .find({name: "da"})
   .exec();
}

我如何在不使用正则表达式的情况下实现这一点?这些都很慢。我尝试过使用$text方法进行索引和搜索,但我不知道如何使其只搜索文档中的特定字段。

我相信使用REGEX是最好的解决方案。你要做的就是真正的正则表达式的设计目的。是的,它很慢,但是你尝试实现的任何其他选项都可能会比较慢

创建文本索引并使用
$text
仅用于匹配全文,因此您不能使用此方法

如果你真的很绝望,真的不想使用正则表达式,你可以试试别的。。。尝试创建和存储对象,并在文档中使用每个可能的子字符串。对象查找是O(1)倍,这意味着它将更快,但折衷是您在数据库中存储了大量数据。如果你同意,那就试试看

例如,让我们使用
Dave
。存储的对象可能如下所示:

{
  "d": 1,
  "da": 1,
  "dav": 1,
  "dave"" 1
}
我们可以将此对象存储在名为
子字符串
的字段中。然后,当我们执行数据库查找时,它非常简单:

User.find({'substrings.da':{$exists:true}})

请考虑使用正则表达式…它是如此的简单,如此的干净,它的设计正是为了你想要的

{
  "d": 1,
  "da": 1,
  "dav": 1,
  "dave"" 1
}