名为Restaurant
的架构包含isLive
标志。
如何仅将包含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
我试图做的是使用猫鼬钩子,但是我不知道如何基于isLive标志返回数据。
restaurantSchema.pre('aggregate', function(next) {
console.log('pre aggregate');
// Return data based on the isLive flag,, is it possible?
next();
});
因此,是否可以使用钩子基于
isLive
标志返回值?或任何其他方式可以解决我的问题? 最佳答案
您可以在MongoDB中创建database view并将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/