如何使用子字符串在Mongo DB中进行比较

发布于 2025-02-12 02:03:53 字数 596 浏览 1 评论 0原文

以下是我的聚合,

db.customers.aggregate([{
    $match: {
        "CDF.UTILITYTYPE.D1.G1" : "12387835"
    }   
},  {
        $project: {
         _id:0, 
         "CDF.UTILITYTYPE.D1.G22.NAME":1, 
         "CDF.UTILITYTYPE.D1.G1":1,
         "CDF.UTILITYTYPE.D5.EVENT": {
            $filter: {
               input: "$CDF.UTILITYTYPE.D5.EVENT",
               as: "item",
               cond: { $eq: [ "$$item.TIME", "12-04-2018 15:46:02" ] }
            }
         }
      }
    }
]).pretty();

我在这里比较时间字段,实际上我想将“ 06-2022”作为子字符串,而不是“ 12-04-2018 15:46:02”这整个日期和时间格式

Below is my aggregation

db.customers.aggregate([{
    $match: {
        "CDF.UTILITYTYPE.D1.G1" : "12387835"
    }   
},  {
        $project: {
         _id:0, 
         "CDF.UTILITYTYPE.D1.G22.NAME":1, 
         "CDF.UTILITYTYPE.D1.G1":1,
         "CDF.UTILITYTYPE.D5.EVENT": {
            $filter: {
               input: "$CDF.UTILITYTYPE.D5.EVENT",
               as: "item",
               cond: { $eq: [ "$item.TIME", "12-04-2018 15:46:02" ] }
            }
         }
      }
    }
]).pretty();

i am comparing TIME field here i actually want to compare "06-2022" as a substring instead of "12-04-2018 15:46:02" this whole date and time format

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

空‖城人不在 2025-02-19 02:03:53

从不将日期/时间值作为字符串存储,这是一个设计缺陷。存储始终正确的日期对象。

一旦您纠正了数据类型,例如,

{
   $set: {
      TIME: {
         $dateFromString: {
            dateString: "$TIME",
            format: "%d-%m-%Y %H:%M:%S"
         }
      }
   }
}

您可以使用例如

cond: {
   $eq: [
      { $dateTrunc: { date: "$TIME" unit: "month" } },
      ISODate("2022-06-01")
   ]
}

或猜测进行过滤

cond: {
   $eq: [
      { $dateTrunc: { date: "$TIME" unit: "month" } },
      { $dateTrunc: { date: "$NOW" unit: "month" } }
   ]
}

You never store date/time values as string, it's a design flaw. Store always proper Date objects.

Once you corrected the data type, e.g. with

{
   $set: {
      TIME: {
         $dateFromString: {
            dateString: "$TIME",
            format: "%d-%m-%Y %H:%M:%S"
         }
      }
   }
}

you can filter by using for example

cond: {
   $eq: [
      { $dateTrunc: { date: "$TIME" unit: "month" } },
      ISODate("2022-06-01")
   ]
}

or supposingly

cond: {
   $eq: [
      { $dateTrunc: { date: "$TIME" unit: "month" } },
      { $dateTrunc: { date: "$NOW" unit: "month" } }
   ]
}
箜明 2025-02-19 02:03:53
db.customers.aggregate([{
    $match: {
        "CDF.UTILITYTYPE.D1.G1" : "12387835"
    }   
},  {
        $project: {
         _id:0, 
         "CDF.UTILITYTYPE.D1.G22.NAME":1, 
         "CDF.UTILITYTYPE.D1.G1":1,
         "CDF.UTILITYTYPE.D5.EVENT": {
            $filter: {
               input: "$CDF.UTILITYTYPE.D5.EVENT",
               as: "item",
               cond: { $regexMatch: { input:"$item.TIME", regex: "05-2022"}}
            }
         }
      }
    }
]).pretty();
db.customers.aggregate([{
    $match: {
        "CDF.UTILITYTYPE.D1.G1" : "12387835"
    }   
},  {
        $project: {
         _id:0, 
         "CDF.UTILITYTYPE.D1.G22.NAME":1, 
         "CDF.UTILITYTYPE.D1.G1":1,
         "CDF.UTILITYTYPE.D5.EVENT": {
            $filter: {
               input: "$CDF.UTILITYTYPE.D5.EVENT",
               as: "item",
               cond: { $regexMatch: { input:"$item.TIME", regex: "05-2022"}}
            }
         }
      }
    }
]).pretty();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文