Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 按2个字段搜索mongoDB_Node.js_Mongodb_Mongoose - Fatal编程技术网

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