gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:16:27 27 4
gpt4 key购买 nike

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

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com