假设我有一组子数组:
{ _id: 1, thread: [{body: "Foo"}, {body: "Test"}]},
{ _id: 2, thread: [{body: "Bar"}, {body: "Lorem"}, {body: "Ipsum"}]}
我需要搜索这些并返回子数组中匹配的body
文本,结果如下:
{ _id: 1, thread: [{body: "Test"}]},
{ _id: 2, thread: []}
以下查询执行此操作:
db.threads.aggregate([
{
$project: {
thread: {
$filter: {
input: "$thread",
as: "thread",
cond: {"$eq": {"$$thread.body": "Test"}}
}
}
}
}
])
但是,我需要对包含字符串的任何内容进行文本搜索,例如与字母e
匹配的任何内容,不区分大小写。 $eq
的问题是它只返回完全匹配。
我无法弄清楚如何做到这一点。
作为备注,如果有帮助,我在thread.body
上有一个全文索引。
答案 0 :(得分:0)
到目前为止,我有这个:
db.threads.aggregate([
{
$project: {
thread: {
$filter: {
input: "$thread",
as: "thread",
cond: {$gt: [{"$indexOfBytes": ["$$thread.body", "est"]}, -1]}
}
}
}
}
])
似乎很蹩脚。寻找更好的方法来做到这一点。