我有一个大约有5万条关于候选人的记录的数据库,例如下面的例子:
[
{
"_id":{
"$oid":"5744eff20ca7832b5c7452321"
},
"name":"Candidate 1",
"characteristics":[
{
"name":"personal skills",
"info":[
"Great speaker",
"Very friendly",
"Born to be a leader"
]
},
{
"name":"education background",
"info":[
"Studied Mechanical Engineering",
"Best of his class 2001"
]
}
]
},
... thousands more objects with same structure
]
考虑到一些个人技能,我想搜索与该输入最匹配的内容:
输入示例: [“发言人”,“组长”]
预期输出: 从最佳匹配中下降的候选对象(整个对象)列表。
我基本上只需要搜索“个人技能”字段。
使用MongoDB解决此问题的最佳方法是什么?还是有另一个更适合此问题的数据库?
答案 0 :(得分:1)
以下使用正则表达式的查询为我们带来了<div class="container">
<h1>Custom Checkboxes</h1></br>
<label class="customcheck">One
<input type="checkbox" checked="checked">
<span class="checkmark"></span>
</label>
<label class="customcheck">Two
<input type="checkbox">
<span class="checkmark"></span>
</label>
<label class="customcheck">Three
<input type="checkbox">
<span class="checkmark"></span>
</label>
<label class="customcheck">Four
<input type="checkbox">
<span class="checkmark"></span>
</label>
</div>
和speaker
的匹配记录。
leader
为获得更好的性能,我们可以使用如下所示的Text Index,但请注意,每个集合只允许一个文本索引
db.collection_name.find(
{ $and :
[
{"characteristics.info": /.*speaker.*/},
{"characteristics.info": /.*leader.*/}
]
}
)
创建文本索引后,我们可以看到它已用于搜索
使用解释来查看文本索引的使用
db.collection_name.createIndex({"characteristics":"text"});
解释了查询计划的Mongo shell输出
db.collection_name.find({ $and: [{"characteristics.info": /.*speaker.*/}, {"characteristics.info": /.*leader.*/}]}).explain()