【问题标题】:Hiding sub-array non-matching from mongodb gte seach隐藏从 mongodb gte 搜索不匹配的子数组
【发布时间】:2020-11-14 22:34:57
【问题描述】:

所以我已经能够让我的gte 查询为 mongodb 工作。但是我注意到查询虽然是正确地打印出文档。它不会删除/隐藏不正确的子数组。

例如:

{history:[{starttime:1593143279079},{starttime:1593236606706}}

现在我只想要 gte 到 1593236606706 的子数组

但是当我运行以下查询时

{"history.starttime":{$gte:1593236606706}}

我得到了正确的文档,因为是的,该文档有一个 gte,然后是 1593236606706,但是我也看到了所有不相关的子数组,例如 1593143279079。

现在我知道我可以在节点或任何其他程序中进行 foreach 签入。但是,在不相关的文档返回之前,肯定有办法移除或隐藏它吗?

这是样本数据

    {
  "_id": "5ef2bbb25b43e19dab7cac9f",
  "UUID": "72296e08-2086-3b25-b66f-09fe14e7a1b9",
  "ipaddress": "101.118.63.108",
  "history": [
    {
      "HID": "3892b3d0-b5c3-11ea-a984-15a58d42facb",
      "station": "DRN1",
      "starttime": 1592966066060,
      "endtime": 1592966101344
    },
    {
      "HID": "4ccfd300-b5c3-11ea-a984-15a58d42facb",
      "station": "PERTHRadio",
      "starttime": 1592966100016,
      "endtime": 1592966101480
    },
    {
      "HID": "4de53aa0-b5c3-11ea-a984-15a58d42facb",
      "station": "PERTHRadio",
      "starttime": 1592966101833
    },
    {
      "HID": "c4b7af20-b607-11ea-b80a-916b111bece1",
      "station": "PERTHRadio",
      "starttime": 1592995506961,
      "endtime": 1592995508535
    },
    {
      "HID": "c5aa4c80-b607-11ea-b80a-916b111bece1",
      "station": "PERTHRadio",
      "starttime": 1592995508551,
      "endtime": 1592997386659
    },
    {
      "HID": "186f7e40-b68f-11ea-9d92-0ff1a766d952",
      "station": "DRN1",
      "starttime": 1593053629476,
      "endtime": 1593053631582
    },
    {
      "HID": "cb9f79a0-b759-11ea-80ed-dbf0ea8c5f4f",
      "station": "PERTHRadio",
      "starttime": 1593140688441,
      "endtime": 1593141273000
    },
    {
      "HID": "e0c4d920-b75d-11ea-80ed-dbf0ea8c5f4f",
      "station": "PERTHRadio",
      "starttime": 1593142441905
    },
    {
      "HID": "92b648d0-b75e-11ea-a743-2994856ad452",
      "station": "PERTHRadio",
      "starttime": 1593142740444
    },
    {
      "HID": "9db86e20-b75e-11ea-a743-2994856ad452",
      "station": "PERTHRadio",
      "starttime": 1593142758914,
      "endtime": 1593142760449
    },
    {
      "HID": "9ed576e0-b75e-11ea-a743-2994856ad452",
      "station": "PERTHRadio",
      "starttime": 1593142760781
    },
    {
      "HID": "d670b1a0-b75e-11ea-a29a-c19990a8e870",
      "station": "PERTHRadio",
      "starttime": 1593142854073
    },
    {
      "HID": "d74e1950-b75e-11ea-a29a-c19990a8e870",
      "station": "PERTHRadio",
      "starttime": 1593142855525,
      "endtime": 1593142860214
    },
    {
      "HID": "d948b0d0-b75e-11ea-a29a-c19990a8e870",
      "station": "PERTHRadio",
      "starttime": 1593142858845,
      "endtime": 1593142860481
    },
    {
      "HID": "da540650-b75e-11ea-a29a-c19990a8e870",
      "station": "PERTHRadio",
      "starttime": 1593142860597
    },
    {
      "HID": "e8f683e0-b75e-11ea-a56b-635bc76b120b",
      "station": "PERTHRadio",
      "starttime": 1593142885149
    },
    {
      "HID": "3bc788d0-b75f-11ea-aab1-4d8374b59f5f",
      "station": "PERTHRadio",
      "starttime": 1593143024093
    },
    {
      "HID": "5b69add0-b75f-11ea-8e0e-9de052ed5763",
      "station": "PERTHRadio",
      "starttime": 1593143077164
    },
    {
      "HID": "79db9030-b75f-11ea-b9e5-6780a994ba91",
      "station": "PERTHRadio",
      "starttime": 1593143128243
    },
    {
      "HID": "8f4f0c80-b75f-11ea-9c42-15965300ded2",
      "station": "PERTHRadio",
      "starttime": 1593143164231
    },
    {
      "HID": "b6cfcfb0-b75f-11ea-893e-33873840b421",
      "station": "PERTHRadio",
      "starttime": 1593143230506
    },
    {
      "HID": "d3c37680-b75f-11ea-9e35-8b493642ae94",
      "station": "PERTHRadio",
      "starttime": 1593143279079
    },
    {
      "HID": "e9722710-b75f-11ea-9962-75b52c48511f",
      "station": "PERTHRadio",
      "starttime": 1593143315456
    },
    {
      "HID": "1a92c070-b760-11ea-a959-a184cc7e1bde",
      "station": "PERTHRadio",
      "starttime": 1593143397878
    },
    {
      "HID": "3146d310-b760-11ea-8069-d9d0a9c80a89",
      "station": "PERTHRadio",
      "starttime": 1593143435968
    },
    {
      "HID": "569b4060-b760-11ea-8fb3-57fc4edb6600",
      "station": "PERTHRadio",
      "starttime": 1593143498598
    },
    {
      "HID": "6d8b0960-b795-11ea-9545-fb36a6e7214b",
      "station": "DRN1",
      "starttime": 1593166300405,
      "endtime": 1593166301643
    },
    {
      "HID": "1f5d3430-b839-11ea-a52e-81ad305f80cc",
      "station": "DRN1",
      "starttime": 1593236606706,
      "endtime": 1593236607927
    }
  ]
}

【问题讨论】:

  • 您可以使用位置投影运算符 $ 仅检索匹配的数组元素。
  • 您能举个例子吗? @D.SM
  • 文档中有例子。

标签: arrays mongodb sub-array


【解决方案1】:

你需要过滤数组。

{
    $project:{
        "history":{
            $filter:{
                input:"$history",
                cond:
                    {$gte:["$$this.starttime",1593236606706]}               
            }
        }
    }
}

工作Mongo playground

【讨论】:

  • 我试过你的代码,它给了我这个错误。 must be an array of documents like '[ {_id: 1}, {_id: 2} ]' 我已经添加了我们的示例数据,但我也将看看是否可以稍微修改您的代码以使其正常工作我可以明白您的回答是什么意思。
  • 我根据您提供的内容提供了我的分析器,并且工作正常。最好修改问题以更新数据结构
  • 我已经更新了这个问题。对不起,我以为我说得够清楚了。我的错。您的代码确实有效。
  • 抱歉我的浏览器没有发布更新 - 现在完成
  • 我没有收到任何错误,你提供的数据mongoplayground.net/p/iHM7GGJM3e4
猜你喜欢
  • 2021-04-16
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 2018-02-17
  • 1970-01-01
  • 2012-10-04
  • 2017-04-03
相关资源
最近更新 更多