Mongodb 如何查找字段包含特定字符串的所有文档?

Mongodb 如何查找字段包含特定字符串的所有文档?,mongodb,mongoose,Mongodb,Mongoose,我是mongodb和mongoose的新手,我正在尝试找出如何进行查询,让我找到字段包含特定字符串的所有记录/文档。这用于搜索功能。例如,如果我有一个“users”集合,那么我想查找名字以字符串“Jo”开头的所有用户。像这样: var Users = require('./models/users'); Users.find({ firstname : contains the string 'Jo' }, function(err, user) { if (err) {

我是mongodb和mongoose的新手,我正在尝试找出如何进行查询,让我找到字段包含特定字符串的所有记录/文档。这用于搜索功能。例如,如果我有一个“users”集合,那么我想查找名字以字符串“Jo”开头的所有用户。像这样:

var Users = require('./models/users');
Users.find({ firstname : contains the string 'Jo' }, function(err, user) {
    if (err) {
            return done(err);
    } else {
        return res.json({
            firstname: user.firstname,
        });
    }
});
我不确定该用什么来代替“contains the string'Jo'”,以便该查询能够工作。基本上,它应该返回诸如“Joe”、“John”、“Joyce”等记录/文档

更新===========================================================

这是更新后的代码,但它返回所有记录,而不是只返回与“str”匹配的记录:

问题在于
/[req.params.str]/
。如果
str
设置为“Jo”,那么它应该只返回名称中包含字符串“Jo”的用户,但它会返回每个记录。如何解决此问题?

有两种方法:
使用正则表达式。MongoDB支持正则表达式匹配。下面是一个例子:

users.find({firstname: /Jo/}, function(err, doc) {...})
然而,如果你有一个大的收集,它将是缓慢的。因为正则表达式通常不使用索引,除非有固定的前缀,如/^Jo/

或者在某些情况下,您可能需要尝试新功能: 首先,您需要一个文本索引:

db.users.ensureIndex( { firstname: "text" } );
然后使用运算符:

db.users.find({ $text: { $search: "Jo"}});
文本搜索不仅仅是查找您正在搜索的内容。在某些情况下,它可能无法按您希望的方式工作

$text运算符可以搜索单词和短语。查询匹配完整的词干词。例如,如果文档字段包含blueberry一词,则对blue一词的搜索将与文档不匹配

更多信息,请参阅。

2种方法:
使用正则表达式。MongoDB支持正则表达式匹配。下面是一个例子:

users.find({firstname: /Jo/}, function(err, doc) {...})
然而,如果你有一个大的收集,它将是缓慢的。因为正则表达式通常不使用索引,除非有固定的前缀,如/^Jo/

或者在某些情况下,您可能需要尝试新功能: 首先,您需要一个文本索引:

db.users.ensureIndex( { firstname: "text" } );
然后使用运算符:

db.users.find({ $text: { $search: "Jo"}});
文本搜索不仅仅是查找您正在搜索的内容。在某些情况下,它可能无法按您希望的方式工作

$text运算符可以搜索单词和短语。查询匹配完整的词干词。例如,如果文档字段包含blueberry一词,则对blue一词的搜索将与文档不匹配


有关详细信息,请参阅。

您可以使用正则表达式进行匹配。但是效率不太好,可以使用正则表达式进行匹配。但是效率不是很好。