javascript - 如何根据条件将查询链接到 mongoDB 数据库(mongoose)
问题描述
源代码
let placeForSearch="hampi"
let filteredHotelFacilities=req.body.filter //["Free Wifi"]
let hotels = await Hotel.find({placeForSearch})
.where("facilities")
.all(filteredHotelFacilities)
.in(filteredHotelFacilities)
.select(selectedProperties)
.skip(pageNumber * pageSize)
.limit(pageSize);
req.body.filter
上面的代码查找数据库中的设施数组中是否有任何元素,上面的代码输出下面给出的集合。
{
facilities: [ 'Garden', 'Free Wifi' ],
_id: 60f066e61e6971412cf5e727,
placeForSearch: 'hampi'
},
{
facilities: [ 'Free Wifi' ],
_id: 60f180141121791e2884d6f0,
placeForSearch: 'hampi'
}
数据库
{
facilities: [ 'Garden', 'Free Wifi' ],
_id: 60f066e61e6971412cf5e727,
placeForSearch: 'hampi'
},
{
facilities: [ 'Garden', 'AC' ],
_id: 60f066e61e6971412cf5e727,
placeForSearch: 'hampi'
},
{
facilities: [ 'Free Wifi' ],
_id: 60f180141121791e2884d6f0,
placeForSearch: 'hampi'
}
数据库中的设施数组可以具有以下任何元素或所有元素。
[
"Free Wifi",
"Garden",
"Water park",
"Spa and wellness centre",
"Terrace",
"Fitness centre",
"Restaurant",
"Room service",
"Bar",
"Hot tub/jacuzzi",
"Swimming pool",
"AC"
];
那么如果用户没有应用任何过滤器,我如何才能获取数据库中的所有集合?(req.body.filter=[]
)
换句话说,我如何.all(filteredHotelFacilities).in(filteredHotelFacilities)
根据条件删除。
解决方案
您应该返回一个承诺(通过删除等待)并根据条件进行链式查询,最后查询使用 await 关键字。
let hotels = Hotel.find({placeForSearch}) //remove await keyword
if (filteredHotelFacilities.length > 0) {
hotels=hotels.where("facilities") //remove await keyword
.all(filteredHotelFacilities)
.in(filteredHotelFacilities);
}
hotels = await hotels // apply await keyword here
.select(selectedProperties)
.skip(pageNumber * pageSize)
.limit(pageSize);
推荐阅读
- reactjs - 无法使用道具将菜肴评论传递给组件
- lua - 为什么 Color3 值更改为错误的数字?
- flutter - 如何在模拟器上运行我的 Flutter 应用程序的发布版本
- ms-office - 是否可以使用自动打开功能在线共享 Excel 文件(根据偏好只读)?
- ajax - Laravel Auth - 如果用户未登录隐藏控制器重新生成的编辑和删除按钮 [Yajra DataTables]
- c# - 如何使用 Linq 插入多个表?
- python - 无法训练 tensorflow ssd_mobilenet_v2。无法获取匹配文件
- java - 在 maven 解决其依赖关系之前在本地 maven 中安装第三方 jar?
- google-analytics - 使用 UTM 查询进行预缓存时重复获取请求
- ios - 如何使用基于 PHPhotoLibraryAuthorizationStatus 的 SwiftUI 显示/隐藏视图?