假设我创建了以下数据库/集合:
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< 的第二个元素
在第二个文档中:ljh abc
,以及匹配文档的_id
。
这可能吗?如果是,怎么办?
请注意,我想要的不是 arr
元素的简单投影,而是发生匹配的 arr
元素的投影。
我正在使用 Mongo 3.2.7。
最佳答案
我的第一个想法是我们可以使用 $elemMatch
并解决问题,但是......$elemMatch
上没有文本搜索。
从另一个角度来看,在这种情况下我们可以使用正则表达式,因为首先通过集合进行昂贵的扫描完成了我的文本搜索索引,那么正则表达式将是一个完美的解决方案。
db.stores.find({
$text : {
$search : "abc"
}
}, {
arr : {
$elemMatch : {
$regex : /abc/i
}
}
})
欢迎任何评论!
关于arrays - 仅返回文本搜索匹配的数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38085710/