Node.js 按2个字段搜索mongoDB
我一直在寻找一些关于堆栈溢出的其他答案,并尽我所能做到了这一点。我了解到我需要创建一个文本索引,在其中定义我的模式,我这样做:Node.js 按2个字段搜索mongoDB,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我一直在寻找一些关于堆栈溢出的其他答案,并尽我所能做到了这一点。我了解到我需要创建一个文本索引,在其中定义我的模式,我这样做: productSchema.index({'title': 'text', 'address.city': 'text'}); 如果我只搜索一个字段,即:title,那么我会得到预期的结果 Product.find( { $text: { $search: searchTerm } } ) 但当我试图同时按标题和城市进行搜索时,我的查询有问题 Product.fi
productSchema.index({'title': 'text', 'address.city': 'text'});
如果我只搜索一个字段,即:title,那么我会得到预期的结果
Product.find( { $text: { $search: searchTerm } } )
但当我试图同时按标题和城市进行搜索时,我的查询有问题
Product.find( { $text: { $search: searchTerm }, $text: { $search: city } } )
我没有看到任何错误,但我没有得到任何结果,即使我知道我的查询应该有结果。我不确定这是否是因为地址是一个对象(根据我在指南针中看到的)
这就是我使用Mongoose在模式中定义它的方式
address: {
city: {type: String, required: true }
},
如果我这样做:
Product.find().and([{ title: searchTerm }, { 'address.city': city }])
它几乎起作用了。但我必须输入产品的确切名称。如果该产品被称为“橡胶鸭”,而我键入“鸭”,则不会得到任何结果。如果我输入“橡皮鸭”并选择它所在的城市,我会得到一个结果
我刚才也试过:
Product.find( { $and: [ {$text: { $search: searchTerm }}, { address: {city : city } } ] } )
这似乎有效,但可能会有所改进 你看过下面的链接了吗
在这里,您可以找到如何在同一查询中添加多个表达式。 如果要搜索标题可能等于A或B的标题,请使用如下查询:
db.inventory.find({$or:[{title:“A”},{title:“B”}]})
编辑
如果您需要数据库中的数据来匹配查询中的两个表达式,请使用以下内容:
Product.find({$and:[{地址:{city:{CityName}},{地址:{country:{UK}}]})
谢谢你的链接。我通常会查看Mongoose文档,但我发现MongoDB文档要好得多。在Mongoose文档中很难找到东西,无论如何我都觉得很难。我试着保持一致,使用mongoose语法,因为它与mongoWell不同。我给了你一个例子,说明如何使用mongoose语法来解决你的相关问题,是不是应该,而不是,或者两个条件都需要满足如果两个条件都应该满足,那么是的,我会编辑我的博文谢谢。我现在正在测试它,但得到一个错误,我将尝试调试以及。未知的顶级运算符:$search