【问题标题】:MongoDB match if input exists (aggregation)如果输入存在,则 MongoDB 匹配(聚合)
【发布时间】:2021-04-25 02:02:40
【问题描述】:
$match: {
  date: { $gte: fromDate, $lte: toDate },
  if (userId) { 
    user: userId 
  }
},

我仅在提交userId 时才尝试匹配用户。最好的方法是什么。

【问题讨论】:

    标签: javascript mongodb mongoose aggregate


    【解决方案1】:

    您可以使用mongoose query builder,根据您的条件管理聚合阶段,

    // INITIALIZE
    let p = YourSchemaModel.aggregate();
    // DATE FILTER
    p.match({ date: { $gte: fromDate, $lte: toDate } });
    // USER ID FILTER
    if (userId) p.match({ user: userId });
    // RESULT
    let result = await p.exec();
    

    如果两者都在一起,聚合将自动合并$match 阶段!


    第二个选项:

    let result = await YourSchemaModel.aggregate().match(
      Object.assign(
        { date: { $gte: fromDate, $lte: toDate } }, 
        userId ? { user: userId } : {}
      )
    ).exec();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-29
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 2013-05-29
      • 1970-01-01
      相关资源
      最近更新 更多