【问题标题】:finding the document based on mongodb query condition根据mongodb查询条件查找文档
【发布时间】:2022-01-20 03:11:27
【问题描述】:
{
"responseType" : "success", 
"sentPayload" : "{\"regId\":\"AR34JK\",\"createdOn\":\"2021-12-16T11:17:28.640Z\"}",
"sentUrl" : "DB", 
"tat" : 38.044
} 

这是我的 JSON。如何编写基于sentPayload.createdOn条件的MongoDB查询?

我已经写了查询{"sentPayload.createdOn":{$gte:new Date("2021-12-16")}}

但这并没有返回文档。请帮助我

【问题讨论】:

  • 将字段存储为 JSON 字符串被视为一种反模式。考虑将它们存储为适当的 BSON 对象。

标签: mongodb mongodb-query


【解决方案1】:

将字段存储为 JSON 字符串被视为一种反模式。考虑将它们存储为适当的 BSON 对象。

不过,从 MongoDB v4.4+ 开始,您可以使用 $function 执行 javascript JSON.parse 将 JSON 字符串转换回 JSON 对象。然后执行$toDatecreatedOn 字段转换回正确的日期字段。

db.collection.aggregate([
  {
    $addFields: {
      sentPayload: {
        $function: {
          body: "function(sentPayload) {return JSON.parse(sentPayload)}",
          args: [
            "$sentPayload"
          ],
          lang: "js"
        }
      }
    }
  },
  {
    $addFields: {
      "sentPayload.createdOn": {
        $toDate: "$sentPayload.createdOn"
      }
    }
  },
  {
    $match: {
      "sentPayload.createdOn": {
        $gte: ISODate("2021-12-16T00:00:00.000Z")
      }
    }
  }
])

这是Mongo playground 供您参考。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    相关资源
    最近更新 更多