Mongo查询以下结果

时间:2018-11-16 22:41:00

标签: mongodb mongodb-query

我有一种情况,我想查找所有具有不同交易ID的相同值的文档。如果该值存在于同一个transactionID的两个文档中,则不应打印这些文档。 以下是一些示例文档。

Document 1:
{
"_id" : 1,
"trxId" : “abcd”,
“transactionID” : “1234”,
“Value” : “abcd1234hjgn”
}

Document 2:
{
"_id" : 2,
"trxId" : “efgh”,
“transactionID” : “5678”,
“Value” : “abcd”
}

Document 3:
{
"_id" : 1,
"trxId" : “ijkl”,
“transactionID” : “12345”,
“Value” : “abcd1234hjgn”
}

Document 4:
{
"_id" : 1,
"trxId" : “abcd”,
“transactionID” : “1234”,
“Value” : “abcd1234hjgn”
}

该查询应仅打印文档1和文档2,因为对于两个不同的transactionID,存在“值”:“ abcd1234hjgn”。 结果应该在下面。我该怎么做?

{
"_id" : 1,
"trxId" : “abcd”,
“transactionID” : “1234”,
“Value” : “abcd1234hjgn”
}

{
"_id" : 1,
"trxId" : “ijkl”,
“transactionID” : “12345”,
“Value” : “abcd1234hjgn”
}

1 个答案:

答案 0 :(得分:0)

这是一个漫长的过程,但是可以达到结果。

db.getCollection("stackoverflow").aggregate(

  // Pipeline
  [
    // Stage 1
    {
      $group: {
        _id: '$Value',
        records: {
          $push: {
            trxId: '$trxId',
            transactionID: '$transactionID',
            Value: '$Value',
            _id: '$_id'
          }
        }
      }
    },

    // Stage 2
    {
      $addFields: {
        duplicates: {
          $size: "$records"
        }
      }
    },

    // Stage 3
    {
      $match: {
        duplicates: {
          $gt: 1
        }
      }
    },

    // Stage 4
    {
      $unwind: {
        path: "$records"
      }
    },

    // Stage 5
    {
      $project: {
        _id: '$records._id',
        transactionID: '$records.transactionID',
        Value: '$records.Value',
        trxld: '$records.trxId'
      }
    },

  ]

);