You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:35:43