假设我创建了以下db / collection:
use articles
db.stores.insert( [
{_id : 1, arr : ['abc xyz', 'def']},
{_id : 2, arr : ['jadskf', 'ljh abc']}])
db.stores.createIndex({"arr" : "text"})
我想对数组arr
进行文本搜索,只获取与搜索匹配的数组元素。
例如,
> db.stores.find({$text : {$search : "abc"}})
{ "_id" : 1, "arr" : [ "abc xyz", "def" ] }
{ "_id" : 2, "arr" : [ "jadskf", "ljh abc" ] }
理想情况下,我只想获取第一个文档中arr
的第一个元素:abc xyz
,而只获取第二个文档中arr
的第二个元素:{{ 1}},以及匹配文档的ljh abc
。
这可能吗?如果是这样,怎么样?
请注意,我想要的不是_id
元素的简单投影,而是发生匹配的arr
元素的简单投影。
我正在使用Mongo 3.2.7。
答案 0 :(得分:0)
我的第一个想法是我们可以使用$elemMatch
并解决问题,但是...... $elemMatch
上没有文字搜索。
从其他角度看,我们可以在这种情况下使用正则表达式,因为第一个昂贵的扫描通过集合完成我的文本搜索索引,然后正则表达式将是一个完美的解决方案。
db.stores.find({
$text : {
$search : "abc"
}
}, {
arr : {
$elemMatch : {
$regex : /abc/i
}
}
})
欢迎任何评论!