MongoDB:嵌套视图上的文本搜索

时间:2016-06-23 04:05:57

标签: mongodb full-text-search

我在MongoDB 3.2中有一个文档,其结构如下:

"_id" : ObjectId("5759815b94db5928bea3c3a5"), 
"source" : "pons1", 
"libraries" : [
    {
        "archive" : “deko1”, 
        "last_access" : ISODate("2016-06-09T14:45:04.644+0000"), 
        "books" : [
            {
                "title": "American Gods",
                "author": "Neil Gaiman"
            }, 
            {
                "title": "A Little Life",
                "author": "Hanya Yanagihara"
            }
        ]
    },
    {
        "archive" : “deko90”, 
        "last_access" : ISODate("2016-06-10T12:45:03.624+0000"), 
        "books" : [
            {
                "title": "Sociology of News",
                "author": "Michael Schudson"
            }, 
            {
                "title": "City of God",
                "author": "Augustine of Hippo"
            }
        ]
    }
]

在另一个数组(“libraries”)中有一个数组(“books”)。 由于书名被标记为" text,"我希望能够进行自由文本搜索,并仅返回相关的数组元素。 例如,如果我搜索“神”一词,我希望看到以下结果:

"_id" : ObjectId("5759815b94db5928bea3c3a5"), 
"source" : "pons1", 
"libraries" : [
    {
        "archive" : “deko1”, 
        "last_access" : ISODate("2016-06-09T14:45:04.644+0000"), 
        "books" : [
            {
                "title": "American Gods",
                "author": "Neil Gaiman"
            }
        ]
    },
    {
        "archive" : “deko90”, 
        "last_access" : ISODate("2016-06-10T12:45:03.624+0000"), 
        "books" : [
            {
                "title": "City of God",
                "author": "Augustine of Hippo"
            }
        ]
    }
]

在MongoDB 3.2中,您可以使用“$ filter”(https://docs.mongodb.com/manual/reference/operator/aggregation/filter/)过滤数组的元素。 问题是你不能使用文本搜索($ text)作为$ filter的条件。 $ text只能在聚合管道的第一阶段使用($ match)(https://docs.mongodb.com/manual/tutorial/text-search-in-aggregation/)。 有一个明显的解决方法:放弃MongoDB文本搜索的强大功能,也许可以使用正则表达式。 这对我来说似乎不是一个好选择。我宁可不要失去变音的不敏感性以及MongoDB文本搜索的其他有趣功能。

有没有办法在同一个MongoDB查询中协调$ filter和$ text?

感谢。

0 个答案:

没有答案