Как избежать дублирования значений?

Я новичок в Mongo Db и был бы признателен за некоторую помощь с этим запросом. Мой пересечение данных mongodb такое же количество идентификаторов потока на основе create_date, как отображать каждую первую запись идентификатора разреза

 db.collection.aggregate([{
     {"$project": {
     "RESOURCE_ID": 1,
     "TRANSACTION_ID":1,
     "CREATE_DATE":1
   }}

  ]) 

выход:

      RESOURCE_ID         TRANSACTION_ID              CREATE_DATE   
1      "100-101"      "0:ffff0a0a0983UY:-142"   "Fri Sep 07 16:51:30IST2018"
2      "100-101"      "0:ffff0a0a0983UY:-142"   "Fri Sep 07 16:51:29IST2018"
3      "100-101"      "0:ffff0a0a0983UY:-142"   "Fri Sep 07 16:51:29IST2018"
4      "100-102"      "0:ffff0a0a0983UY:-111"   "Fri Sep 06 16:51:29IST2018"
5      "100-102"      "0:ffff0a0a0983UY:-111"   "Fri Sep 06 16:51:28IST2018"

ожидаемый результат:

       RESOURCE_ID         TRANSACTION_ID              CREATE_DATE   
1      "100-101"      "0:ffff0a0a0983UY:-142"   "Fri Sep 07 16:51:30IST2018"
2      "100-102"      "0:ffff0a0a0983UY:-111"   "Fri Sep 06 16:51:29IST2018"

что вы пробовали до сих пор?

Hagai 26.10.2018 08:53

используя $ project, я получаю RESOURCE_ID и TRANSACTION_ID и CREATE_DATE Я новичок в Mongo Db devloper, я не знаю, что каждая первая запись идентификатора teransection основана на дате cerate @ Hagai

Naresh Varun Guttula 26.10.2018 08:57

Можете ли вы поместить здесь полный запрос, который вы пробовали, и результаты, которые он вам дал? Я постараюсь помочь

Hagai 26.10.2018 08:59

db.collection.aggregate ([{{"$ project": {"RESOURCE_ID": 1, "TRANSACTION_ID": 1, "CREATE_DATE": 1}},]) @ Hagai

Naresh Varun Guttula 26.10.2018 09:10

А как вы вставляете данные? Я хочу убедиться, что формат даты, которую вы вставляете, на самом деле является датой

Hagai 26.10.2018 09:12

Привет, Hagai запрос обновленных данных был автоматически вставлен с помощью приложения @ Hagai

Naresh Varun Guttula 26.10.2018 09:19

Попробуйте db.collection.aggregate([ {$sort:{'CREATE_DATE':-1}}, {$group:{ _id: '$RESOURCE_ID',doc:{$first:'$$ROOT'}}}, {$replaceRoot:{newRoot:"$doc"}} ])

s7vr 26.10.2018 09:32

СПАСИБО @ Veeram

Naresh Varun Guttula 26.10.2018 11:35
0
8
185
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот чего вы хотите: db.collection.aggregate([{"$sort": {CREATE_DATE: 1}},{$group:{"_id": "$RESOURCE_ID", TRANSACTION_ID: {$first: "$TRANSACTION_ID"}, "CREATE_DATE": {$first: "$CREATE_DATE"}}}])

Что он делает - сортирует все документы по дате в возрастающем порядке, потому что нам нужен самый старый документ первым (обратите внимание на предложение sort) .
Затем он группирует документы по полю RESOURCE_ID (которое помечено как новый _id) и берет $first TRANSACTION_ID и $first CREATE_DATE.

Обратите внимание, что вам нужно будет преобразовать ваши временные метки в фактические временные метки, чтобы mongo действительно понимал порядок временных меток. В противном случае mongo будет сортировать их как строки, а это не то, что вам нужно.

Пример:

> db.collection.find().pretty()
{
    "_id" : ObjectId("5bd2bf353ca22147747ec212"),
    "RESOURCE_ID" : "100-101",
    "TRANSACTION_ID" : "0:ffff0a0a0983UY:-142",
    "CREATE_DATE" : ISODate("2017-10-13T10:53:53Z")
}                                                 
{
    "_id" : ObjectId("5bd2bf3c3ca22147747ec213"),
    "RESOURCE_ID" : "100-101",
    "TRANSACTION_ID" : "0:ffff0a0a0983UY:-142",
    "CREATE_DATE" : ISODate("2017-10-14T10:53:53Z")
}
{
    "_id" : ObjectId("5bd2bf3c3ca22147747ec214"),
    "RESOURCE_ID" : "100-102",
    "TRANSACTION_ID" : "0:ffff0a0a0983UY:-111",
    "CREATE_DATE" : ISODate("2017-10-13T10:53:53Z")
}
{
    "_id" : ObjectId("5bd2bf3c3ca22147747ec215"),
    "RESOURCE_ID" : "100-102",
    "TRANSACTION_ID" : "0:ffff0a0a0983UY:-111",
    "CREATE_DATE" : ISODate("2017-10-14T10:53:53Z")
}


> db.collection.aggregate([{"$sort": {CREATE_DATE: 1}},{$group:{"_id": "$RESOURCE_ID", TRANSACTION_ID: {$first: "$TRANSACTION_ID"}, "CREATE_DATE": {$first: "$CREATE_DATE"}}}])
{ "_id" : "100-102", "TRANSACTION_ID" : "0:ffff0a0a0983UY:-111", "CREATE_DATE" : ISODate("2017-10-13T10:53:53Z")
{ "_id" : "100-101", "TRANSACTION_ID" : "0:ffff0a0a0983UY:-142", "CREATE_DATE" : ISODate("2017-10-13T10:53:53Z")

Также стоит упомянуть, что вы должны добавить индексы для CREATE_DATE, потому что вы сортируете по этому полю, и для RESOURCE_ID, потому что mongo должен отсортировать его, чтобы сгруппировать по нему.

Привет, Хагай, небольшая помощь ........ @ Hagai

Naresh Varun Guttula 26.10.2018 11:49

Другие вопросы по теме