Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 在mongo聚合中查找后排除空的forgien记录_Mongodb_Aggregate_Lookup - Fatal编程技术网

Mongodb 在mongo聚合中查找后排除空的forgien记录

Mongodb 在mongo聚合中查找后排除空的forgien记录,mongodb,aggregate,lookup,Mongodb,Aggregate,Lookup,下面我正在使用的代码返回组织列表,其中包含下周内发生的事件 const today = new Date() const weekAfter = new Date() weekAfter.setDate(weekAfter.getDate() + 7) return Organizations.aggregate([ { $lookup: { from: 'events', localField: '_id', foreign

下面我正在使用的代码返回组织列表,其中包含下周内发生的事件

const today = new Date()
const weekAfter = new Date()
weekAfter.setDate(weekAfter.getDate() + 7)

return Organizations.aggregate([
    {
      $lookup: {
        from: 'events',
        localField: '_id',
        foreignField: 'organizations.organizationId',
        as: 'eventsData'
      }
    },
    {
      $project: {
        name: 1,
        logo: 1,
        featuredImage: 1,
        startTime: 1,
        events: {
          $filter: {
            input: '$eventsData',
            as: 'event',
            cond: {
              $and: [
                { $gt: ['$$event.startTime', today] },
                { $lt: ['$$event.startTime', weekAfter] }
              ]
            }
          }
        }
      }
    }
  ]).exec()
return Organizations.aggregate([
    {
      $lookup: {
        from: 'events',
        localField: '_id',
        foreignField: 'organizations.organizationId',
        as: 'eventsData'
      }
    },
    { 
      $unwind: {
        path: "$eventsData",
        preserveNullAndEmptyArrays: false
      }
    }, 
    {
      $group: {
        _id : "$_id",
        name: { $first : "$name" },
        logo: { $first : "$logo" },
        featuredImage: { $first : "$featuredImage" },
        startTime: { $first : "$startTime" },
        eventsData: { $push: "$eventsData" }
      }
    },
    {
      $project: {
        name: 1,
        logo: 1,
        featuredImage: 1,
        startTime: 1,
        events: {
          $filter: {
            input: '$eventsData',
            as: 'event',
            cond: {
              $and: [
                { $gt: ['$$event.startTime', today] },
                { $lt: ['$$event.startTime', weekAfter] }
              ]
            }
          }
        }
      }
    }
  ]).exec()
我希望它只返回下周至少有一个活动的组织

我尝试了以下代码,但它只排除了组织,如果它没有任何相关事件,但包括空事件,即使它们在下周不会发生

const today = new Date()
const weekAfter = new Date()
weekAfter.setDate(weekAfter.getDate() + 7)

return Organizations.aggregate([
    {
      $lookup: {
        from: 'events',
        localField: '_id',
        foreignField: 'organizations.organizationId',
        as: 'eventsData'
      }
    },
    {
      $project: {
        name: 1,
        logo: 1,
        featuredImage: 1,
        startTime: 1,
        events: {
          $filter: {
            input: '$eventsData',
            as: 'event',
            cond: {
              $and: [
                { $gt: ['$$event.startTime', today] },
                { $lt: ['$$event.startTime', weekAfter] }
              ]
            }
          }
        }
      }
    }
  ]).exec()
return Organizations.aggregate([
    {
      $lookup: {
        from: 'events',
        localField: '_id',
        foreignField: 'organizations.organizationId',
        as: 'eventsData'
      }
    },
    { 
      $unwind: {
        path: "$eventsData",
        preserveNullAndEmptyArrays: false
      }
    }, 
    {
      $group: {
        _id : "$_id",
        name: { $first : "$name" },
        logo: { $first : "$logo" },
        featuredImage: { $first : "$featuredImage" },
        startTime: { $first : "$startTime" },
        eventsData: { $push: "$eventsData" }
      }
    },
    {
      $project: {
        name: 1,
        logo: 1,
        featuredImage: 1,
        startTime: 1,
        events: {
          $filter: {
            input: '$eventsData',
            as: 'event',
            cond: {
              $and: [
                { $gt: ['$$event.startTime', today] },
                { $lt: ['$$event.startTime', weekAfter] }
              ]
            }
          }
        }
      }
    }
  ]).exec()
在此处签出并运行MongoDB查询

尝试以下操作:

return Organizations.aggregate([
    {
      $lookup: {
        from: 'events',
        localField: '_id',
        foreignField: 'organizations.organizationId',
        as: 'eventsData'
      }
    },
    {
      $project: {
        name: 1,
        logo: 1,
        featuredImage: 1,
        startTime: 1,
        events: {
          $filter: {
            input: '$eventsData',
            as: 'event',
            cond: {
              $and: [
                { $gt: ['$$event.startTime', today] },
                { $lt: ['$$event.startTime', weekAfter] }
              ]
            }
          }
        }
      }
    },
    {
      $match:{
        "events.0":{
          $exists:true
        }
      }
    }
  ]).exec()
试试这个:

return Organizations.aggregate([
    {
      $lookup: {
        from: 'events',
        localField: '_id',
        foreignField: 'organizations.organizationId',
        as: 'eventsData'
      }
    },
    {
      $project: {
        name: 1,
        logo: 1,
        featuredImage: 1,
        startTime: 1,
        events: {
          $filter: {
            input: '$eventsData',
            as: 'event',
            cond: {
              $and: [
                { $gt: ['$$event.startTime', today] },
                { $lt: ['$$event.startTime', weekAfter] }
              ]
            }
          }
        }
      }
    },
    {
      $match:{
        "events.0":{
          $exists:true
        }
      }
    }
  ]).exec()
核对