如何查询MongoDB嵌套子文档中slots.slots.available字段的布尔值
嵌套子文档布尔字段查询方案
需求
查询MongoDB文档中slots.slots.available字段值为true的文档,数据结构为双层嵌套数组。
Mongoose 查询语句
1. 查询含符合条件插槽的完整文档
要找出所有存在至少一个内层插槽available: true的文档,使用以下代码:
// 导入你的Mongoose模型 const SlotModel = require('./path-to-your-model'); async function getDocumentsWithAvailableSlots() { const result = await SlotModel.find({ 'slots.slots.available': true }); console.log(result); } getDocumentsWithAvailableSlots();
2. 精准筛选并返回指定嵌套字段
如果只需返回符合条件的内层插槽(而非整个文档),用聚合查询实现:
async function getFilteredAvailableSlots() { const result = await SlotModel.aggregate([ // 先匹配存在符合条件插槽的文档 { $match: { 'slots.slots.available': true } }, // 过滤出仅包含available: true的内层插槽 { $project: { slots: { $map: { input: '$slots', as: 'outerSlot', in: { date: '$$outerSlot.date', slots: { $filter: { input: '$$outerSlot.slots', as: 'innerSlot', cond: { $eq: ['$$innerSlot.available', true] } } }, _id: '$$outerSlot._id' } } }, // 按需保留其他顶层字段,比如bid、name等 bid: 1, name: 1 } } ]); console.log(result); } getFilteredAvailableSlots();
关键说明
- MongoDB支持通过点符号
'slots.slots.available'直接匹配双层嵌套数组中的字段,自动遍历所有外层和内层数组元素。 - 聚合查询的方式可以精准筛选出符合条件的嵌套数据,减少不必要的数据传输。
内容的提问来源于stack exchange,提问作者Venkat Cpr
相关产品推荐
相关产品推荐

