我一直在寻找有关堆栈溢出的其他答案,并尽我所能。我了解到需要创建一个文本索引,在其中定义我的模式,就像这样:
productSchema.index({'title': 'text', 'address.city': 'text'});
如果我仅按1个字段(即标题)进行搜索,那么我会得到预期的结果。
Product.find( { $text: { $search: searchTerm } } )
但是尝试按标题和城市一起搜索时,我的查询有问题。
Product.find( { $text: { $search: searchTerm }, $text: { $search: city } } )
我没有看到错误,但是即使知道查询应该有结果,也没有结果。我不确定是否是因为地址是一个对象(根据我在Compass中看到的内容)
这就是我在使用Mongoose的模式中定义它的方式
address: {
city: {type: String, required: true }
},
如果我这样做:
Product.find().and([{ title: searchTerm }, { 'address.city': city }])
几乎可以使用。但是我必须输入产品的确切名称。如果产品被称为“橡皮鸭”,而我键入“鸭子”,则没有任何结果。如果我输入“橡皮鸭”并选择城市,则会在返回的结果中列出。
我也尝试过这种方法:
Product.find( { $and: [ {$text: { $search: searchTerm }}, { address: {city : city } } ] } )
这似乎可行,但可能需要改进!
答案 0 :(得分:1)
您是否浏览了以下链接?
https://docs.mongodb.com/manual/reference/operator/query/or/
在那里,您可以找到如何在同一查询中添加多个表达式。
如果要搜索标题可能等于A或B的标题,请使用如下查询:db.inventory.find( { $or: [ { title: "A" }, { title: "B"} ] } )
。
编辑
如果您需要db中的数据来匹配查询中的两个表达式,请使用以下内容:
Product.find( { $and: [{ address:{city: "CityName"} }, { address: {country : "UK" } } ] } )