gpt4 book ai didi

node.js - 按 2 个字段搜索 mongoDB

转载 作者:可可西里 更新时间:2023-11-01 10:37:33 26 4
gpt4 key购买 nike

我一直在查看有关堆栈溢出的一些其他答案,并尽我所能。我了解到我需要创建一个文本索引,在其中定义我的模式,我这样做是这样的:

productSchema.index({'title': 'text', 'address.city': 'text'});

如果我只按 1 个字段搜索,即:标题,那么我会得到预期的结果。

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 }])

它几乎可以工作。但我必须输入产品的确切名称。如果产品名为“a rubber duck”,而我输入“duck”,则不会得到任何结果。如果我输入“橡皮鸭”并选择它列出的城市,我会得到一个结果。

我刚刚也试过这个:

Product.find( { $and: [ {$text: { $search: searchTerm }}, { address: {city : city } }  ] } )

这似乎可行,但可能会有所改进!

最佳答案

您查看过下面的链接了吗?
https://docs.mongodb.com/manual/reference/operator/query/or/
在那里您可以找到如何在同一查询中添加多个表达式。如果您想搜索 title 可能等于 A 或 B 的标题,请使用如下查询:db.inventory.find( { $or: [ { title: "A"}, { title: "B "} ] } ).
编辑
如果您需要数据库中的数据来匹配查询中的两个表达式,请使用如下内容:
Product.find( { $and: [{ address:{city: "CityName"} }, { address: {country : "UK"} } ] } )

关于node.js - 按 2 个字段搜索 mongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54236364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com