查询Mongo以仅获取与先前文档不同的文档

时间:2019-04-09 12:20:45

标签: mongodb mongodb-query

我想知道在MongoDB中是否可能进行以下操作。

我收集了以下形状的文件:

{
  "day" : ISODate("2018-12-31T23:00:00.000Z"),
  "value": [some integer value]
}

是否可以查询此集合以仅获取具有与上一个不同的值的文档(按天升序排序时)?例如,具有以下文档:

{
      "day" : ISODate("2019-04-01T00:00:00.000Z"),
      "value": 10
},
{
      "day" : ISODate("2019-04-02T00:00:00.000Z"),
      "value": 10
},
{
      "day" : ISODate("2019-04-03T00:00:00.000Z"),
      "value": 15
},
{
      "day" : ISODate("2019-04-04T00:00:00.000Z"),
      "value": 15
},
{
      "day" : ISODate("2019-04-05T00:00:00.000Z"),
      "value": 15
},
{
      "day" : ISODate("2019-04-06T00:00:00.000Z"),
      "value": 10
}

我想检索2018-04-01、2018-04-03和2018-04-06的文档。数据中没有“漏洞”,我有一段时间内所有天的条目。

----编辑

我看不到链接的答案也可以回答我的问题。我无法按价值分组,因为价值会在以后重复出现,并且我需要所有价值等于某个数字的期间。在上面的示例中,您可以将2018-04-06的值更改为10,结果仍然需要获取三个文档。

----编辑2

运行后收到的结果

aggregate([{ "$sort": { "day": 1, "value": 1 } }, { "$group": { "_id": "$value", "day": { "$first": "$day" } } }])

是这样的:

/* 1 */
{
    "_id" : 15.0,
    "day" : ISODate("2019-04-03T00:00:00.000Z")
}

/* 2 */
{
    "_id" : 10.0,
    "day" : ISODate("2019-04-01T00:00:00.000Z")
}

是我要查找的内容(应该有三个文档,其中两个的值为10)。

0 个答案:

没有答案