search - 没有 RegEx 的 Mongoose 部分字段搜索
问题描述
假设我有这个架构:
var mongoose = require("mongoose")
var userSchema = new mongoose.Schema({
name: {type: String},
// other fields
}, { collation: { locale: "en_US", strength: 1 } });
我使用排序规则,以便搜索不区分大小写
然后假设我有一个名为“Dave”的文件
{
name: "Dave",
// other fields
}
然后,我搜索它,但没有写下整个单词
var userList = {
.find({name: "da"})
.exec();
}
如何在不使用正则表达式的情况下完成这项工作?这很慢。我试过做一个索引,然后用 $text 方法搜索,但我不知道如何让它只搜索文档中的特定字段。
解决方案
我相信使用 REGEX 是您最好的解决方案。您正在尝试做的实际上是正则表达式的设计目的。是的,它很慢,但是您尝试实施的任何其他选项可能会更慢。
创建文本索引并使用$text
仅旨在匹配完整的单词,因此您不能使用此方法。
如果您真的很绝望,并且真的不想使用正则表达式,您可以尝试其他方法...尝试创建和存储一个对象,以及文档中的每个可能的子字符串。对象查找是 O(1) 时间,这意味着它会更快,但代价是您在数据库中存储了荒谬的数据量。如果这对你来说没问题,那就试试看。
举个例子吧Dave
。您存储的对象可能如下所示:
{
"d": 1,
"da": 1,
"dav": 1,
"dave"" 1
}
我们可以将此对象存储在一个名为 的字段中substrings
。那么当我们进行数据库查找的时候,就这么简单:
User.find({ 'substrings.da': { $exists: true }})
但是请考虑使用正则表达式......它更简单,更干净,并且专为您想要的而设计。
推荐阅读
- c# - 罗技照明 SDK 脉冲效果未返回 G600
- sql - BO 4.2 在查询脚本中编辑时间值
- java - 将 .CR2 图像从一个文件夹复制到另一个文件夹的程序出现 java.nio.file.FileSystemException 错误
- html - 我看不到覆盖顶部的内容
- dictionary - 在飞镖中,有什么办法可以限制某些特殊字符串中的键
- html - 如何防止 flexbox 垂直或高度收缩
- sql - Postgres查询组合两列值
- php - PHP文件总是给出错误的响应
- c# - 如何插入 DateTime 类型的值
- c# - Dynamics CRM 2013 工作流 C# 从链接实体中提取字段