gpt4 book ai didi

javascript - Mongoose,如何根据特定 bool 标志返回与架构相关的数据?

转载 作者:行者123 更新时间:2023-12-02 22:11:14 24 4
gpt4 key购买 nike

Schema called Restaurant contain isLive flag.

如何仅将包含 isLive 标志的餐厅返回到 true

我不想在每个查询或每个聚合中检查 isLive,如下所示:

exports.getRestaurants = async (req, res) => {
const restaurants = await Restaurant.getAllRestaurants();
if (!restaurants) return next();
const liveRestaurants = restaurants.filter(restaurant => restaurant.isLive);
res.status(200).json({ restaurants: liveRestaurants });
};

我想要做的是将与 Restaurant 架构相关的每个操作过滤为 isLive = true

我尝试做的是使用 Mongoose 钩子(Hook),但我不知道如何根据 isLive 标志返回数据。

restaurantSchema.pre('aggregate', function(next) {
console.log('pre aggregate');
// Return data based on the isLive flag,, is it possible?
next();
});

那么,是否可以使用钩子(Hook)根据 isLive 标志返回值?或者任何其他方法可以解决我的问题?

最佳答案

您可以创建 database view在 MongoDB 中并将您的 isLive 添加为过滤条件。

Restaurant.db.createCollection('liveRestaurants', {
viewOn: 'restaurants',
pipeline: [{ $match: { isLive: true } }]
});

然后您需要使用相同架构的另一个模型:

let Restaurant = mongoose.model('Restaurant', restaurantSchema);
let LiveRestaurant = mongoose.model('liveRestaurants', restaurantSchema, 'liveRestaurants');

您可以像查询常规模型一样查询只读模型,但它只会返回过滤后的餐厅:

let result = await LiveRestaurant.find();

关于javascript - Mongoose,如何根据特定 bool 标志返回与架构相关的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59552690/

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