【发布时间】:2015-07-02 11:02:25
【问题描述】:
我有一个包含城市、州和邮政编码列表的 MongoDB 数据库。我希望能够运行一个查询,该查询将根据用户输入检查每个字段,并且无法弄清楚如何执行此操作。这是数据库中的文档示例:
{"_id":"92199","city":"San Diego","state":"CA"}
这是我用来返回该文档的路线:
app.get('/city/:city', function(req, res){
var query = City.aggregate( [
{ $group: { _id: "$zip", city: {"$first" : "$city"}, state: {"$first" : "$state"} } },
{ $match: {"city": new RegExp(req.params.city, "i")} }
]);
query.exec(function(err, city){
if(err){
console.log(err);
return res.send(err);
}
console.log(city);
res.json(city);
});
});
问题是,如果我查询 San Diego, CA,查询将失败,因为它只搜索城市。如何查询城市、州和邮编 (_id) 以便仍然返回值?
【问题讨论】:
-
不应该聚合一次而不是每次请求
-
我只是使用聚合,因为我所有的搜索似乎都指向它作为查询多个字段的方式。
-
这听起来像是一个普通的查询(不是需要聚合的东西)——“查询将失败,因为它只搜索城市”是什么意思?
-
(也就是说,您可以只执行 find(),其中您的查询对象具有任意组合的 _id、city 和 state 属性中的一个或多个,它将返回所有匹配的文档。但是也许我错过了您希望实现的某些方面。)
-
查询当前的工作方式是它只是搜索城市字段,所以如果我搜索“加利福尼亚州圣地亚哥”,它将失败,因为它没有搜索州并且没有城市字段包含“加利福尼亚州圣地亚哥”,只是“圣地亚哥。
标签: node.js mongodb express mongoose