Java Spring数据MongoDB-投影和搜索

Java Spring数据MongoDB-投影和搜索,java,mongodb,spring-data-mongodb,mongodb-indexes,Java,Mongodb,Spring Data Mongodb,Mongodb Indexes,我使用通配符文本索引,以便在类的每个字段中搜索模式。我还使用投影来删除某个字段: @Query(value = "{$text: { $search: ?0 }, fields = "{'notWantedField':0}") 但是,我想阻止匹配不需要的字段中的内容 换句话说,我希望首先投影并删除字段,然后搜索其余字段 有没有一种方法可以在保持通配符搜索的同时将投影和搜索结合起来 非常感谢 我正在使用SpringDataMongoDB1.10.8一个可能的解决方案可以是$and操作符和$re

我使用通配符文本索引,以便在类的每个字段中搜索模式。我还使用投影来删除某个字段:

@Query(value = "{$text: { $search: ?0 }, fields = "{'notWantedField':0}")
但是,我想阻止匹配不需要的字段中的内容

换句话说,我希望首先投影并删除字段,然后搜索其余字段

有没有一种方法可以在保持通配符搜索的同时将投影和搜索结合起来

非常感谢


我正在使用SpringDataMongoDB1.10.8

一个可能的解决方案可以是$and操作符和$regex组合

例如,在Mongodb文档之后,如果您想创建一个结合subject和author db.articles.createIndex{author:text,subject:text}的文本索引,则可以通过以下查询排除author字段:

db.articles.find( {$and: [{ $text: { $search: "coffee" } }, {"author": {'$regex' : '^((?!coffe).)*$', '$options' : 'i'}}]}, {"author": 0})

在您的情况下,考虑到索引是通配符,您必须使用正则表达式排除投影中的所有字段。

谢谢。根据我所理解的,在排除域中阻止匹配,但如果匹配另一个字段,则将其视为积极响应。这意味着如果字符串coffee同时出现在author和subject字段中,则不应将其过滤掉。