该问题的标题总结了我当前尝试进行查询的方法,试图实现以下目标:
“找到符合文本搜索条件的所有文档,或者不要完成一堆其他属性”
我的查询如下:
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 }
}
现在只是忽略文本搜索,如果没有发送任何内容.
这是答案,直到有人回答!