【问题标题】:Mongoose aggregate pipeline date greater than query with bson varibleMongoose 聚合管道日期大于带有 json 变量的查询
【发布时间】:2021-01-19 19:37:31
【问题描述】:

实际上,我在尝试了以前的问题答案后提出了这个问题。但是,我没有找到任何线索,这就是我问的原因

努力实现:

在猫鼬聚合中,我使用管道聚合通过以下查询从集合中获取文档

$match: {
  $and: [
    {
      $expr: {
        $eq: ["$device_id", "$$device_id"]
      }
    },
    {
      date: {
        "$gte": "$billing_cycle_startdate",
        "$lte": endOfDay
      }
    }
  ]
}

billing_cycle_startdate 将是:2020-12-31T00:00:00.000Z 通过以下查询

{
  $addFields: {
    billing_cycle_startdate: {
      $concat: [
        year, "-", month, "-", "$device_details.billing_cycle"
      ]
    },
  }
},
{ $set: { billing_cycle_startdate: {  $toDate: "$billing_cycle_startdate" } }},

但此查询返回空结果

如果我跑步

{
  date: {
    "$gte": new Date("2020-12-31T00:00:00.000Z"),
    "$lte": endOfDay
  }
}

它按预期返回结果

有没有其他方法可以在不使用 new Date() 函数的情况下将 2020-12-31T00:00:00.000Z 转换为可查询格式,并且还想知道 之间有什么区别>2020-12-31T00:00:00.000Z新日期("2020-12-31T00:00:00.000Z")

还有其他方法可以实现这个查询吗??

提前谢谢..!

【问题讨论】:

  • 如果根本没有结果,那一定是比赛阶段正在排除一切。我们可以查看示例文档和完整的管道吗?
  • 感谢您的关心,我发现我的查询有问题。使用变量@Joe 只是语法错误

标签: node.js mongodb mongoose mongodb-query


【解决方案1】:

终于,经过几天的磨难,我发现我的查询出了什么问题

我只是忘记在管道中使用 let 语法来指定变量 billing_cycle_startdate 并忘记在管道字段阶段使用它

管道无法直接访问输入文档字段。 相反,首先,定义输入文档字段的变量, 然后在流水线的各个阶段引用变量。

了解更多:click here

然后我将查询更改如下

   {
                $lookup: {
                    from: "name",
                    let: {
                        device_id: "$budget.device",
                        billing_cycle_startdate: "$billing_cycle_startdate"
                    },
                    pipeline: [
                        {
                            $match: {
                                $and: [
                                    {
                                        $expr: {
                                            $eq: ["$device_id", "$$device_id"]
                                        }
                                    },
                                    {
                                        $and: [
                                            {
                                                $expr: {
                                                    $gte: ["$date", "$$billing_cycle_startdate"],
                                                },
                                            },
                                            {
                                                $expr: {
                                                    $lte: ["$date", endOfDay],
                                                }
                                            }
                                        ]
                                    }
                                ]
                            }
                        }
                    ],
                    as: "dailyenergylogs"
                }
            },

【讨论】:

    猜你喜欢
    • 2020-08-31
    • 2021-07-04
    • 1970-01-01
    • 2021-08-23
    • 2014-10-16
    • 2021-06-29
    • 2015-06-28
    • 1970-01-01
    • 2021-01-22
    相关资源
    最近更新 更多