arrays - 仅返回文本搜索匹配的数组元素

标签 arrays mongodb full-text-search

假设我创建了以下数据库/集合:

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/

相关文章:

java - 如何从java中的固定数组中删除最后一项

javascript - 如何处理嵌套循环中的 promise

python - Flask 应用程序搜索栏

ruby-on-rails - Sunspot:如何对具有不同值的多个字段进行全文查询?

javascript - 如何有效地检查连续数字列表是否缺少任何元素

Javascript 替换为/gi 和数组迭代器

c - 我想将左平衡二叉树的数组表示形式从 In-order 转换为 Level order representation :

node.js - Mongoose 的 Populate 方法出现 MissingSchemaError

javascript - 如何使用 Mongoskin 支持模式。

postgresql - 使用 Postgres 进行 Azure 搜索