如何避免重复值?

纳雷什·瓦伦·古图拉

我是 Mongo Db 的新手,希望得到一些有关此查询的帮助。我的 mongodb 数据横切相同的 ids 数基于 create_date 如何显示每个横切 id 第一条记录

 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"
哈该

这就是你想要的: db.collection.aggregate([{"$sort": {CREATE_DATE: 1}},{$group:{"_id": "$RESOURCE_ID", TRANSACTION_ID: {$first: "$TRANSACTION_ID"}, "CREATE_DATE": {$first: "$CREATE_DATE"}}}])

它的作用 - 按日期按升序对所有文档进行排序,因为我们首先想要最旧的文档(注意sort子句)。
然后,它按字段“RESOURCE_ID”(标记为 new _id对文档进行分组,并采用$firstTRANSACTION_ID 和$firstCREATE_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 必须对其进行排序才能按它进行分组

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章