javascript – Mongodb使$text搜索使用空字符串作为$或的单个子句

该问题的标题总结了我当前尝试进行查询的方法,试图实现以下目标:

“找到符合文本搜索条件的所有文档,或者不要完成一堆其他属性”

我的查询如下:

var query = {
            $or: [
                { $text: { $search: searchText } },
            ],
            $and: [
                {createdon: { $gte: start_date, $lt: end_date} },
                {author: req.user._id}
            ]

        }; 

如果用户发送空字符串,则查询不会返回任何结果,尽管集合中的文档符合AND子句中用户在请求中发送的条件.

所以基本上我都在摸索如何使用MongoDB的$text搜索来处理空字符串.

我知道在创建查询之前我可以简单地发送文本,如下所示:

  var query;
  if (!searchText.length) {
     //We know there's no search text, so just use the conditions in the AND clause
     query = {
         createdon: { $gte: start_date, $lt: end_date},
         author: req.user._id
     };

只是想知道如果我可以获得这个所需的功能,而无需在条件的控制流内创建查询对象.

最佳答案 对于未来的读者:

我似乎无法解决这个问题,所以现在为了让这个工作我已经去了查询的条件声明,这是正常的.

  //Get the search text from the request     
  var searchText = req.body.searchText || "";

  var query = {
        event_date: { $gte: start_date, $lt: end_date},
        author: req.user.id
  };

  //Check if there is any search text before applying the $text query
  if (searchText.length) {

     query["$text"] = { $search: searchText }
  }

现在只是忽略文本搜索,如果没有发送任何内容.

这是答案,直到有人回答!

点赞