我在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?
感谢。