MongoDB最接近的属性匹配

Tho*_*mas 5 mongoose mongodb mongodb-query aggregation-framework

假设我在MongoDB中有一个Users集合,其架构如下所示:

{
    name: String,
    sport: String,
    favoriteColor: String
}
Run Code Online (Sandbox Code Playgroud)

并且假设我传递了这样的值以匹配用户:

{ name: "Thomas", sport: "Tennis", favoriteColor:"blue" }

我想做的是根据所有这些属性匹配用户.但是,如果没有用户回来,我想在这些属性上匹配用户:

{sport: "Tennis", favoriteColor:"blue" }

如果没有用户回来,我想在这个属性上匹配一个用户:

{ favoriteColor: "blue" }

是否可以在Mongo的一个查询中执行类似的操作?我看到$switchMongo中的情况会匹配一个案例然后立即返回,但问题是我无法访问它在then块中检索到的文档.看起来你只能在那里写字符串.

关于如何完成我正在寻找的任何建议?

只执行多个User.find({...})查询是最好的(也是唯一的方法)吗?

anh*_*hlc 6

这是使用 MongoDB 文本索引的一个很好的例子:

首先,您需要在这些字段上创建文本索引:

db.users.ensureIndex({ name: "text", sport: "text", favoriteColor: "text" });
Run Code Online (Sandbox Code Playgroud)

然后,您可以搜索与“ $text ”受数字限制的最佳匹配以显示:

db.users.find( { $text: { $search: "Tennis blue Thomas" } } ).limit(10)
Run Code Online (Sandbox Code Playgroud)

  • @tatuck,文本索引用于语义搜索,而不是词汇搜索。如果您想使用正则表达式进行词法搜索,请创建一个普通索引 (2认同)