Монго запрос на приведенный ниже результат - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть сценарий, в котором я хочу найти все документы, в которых существует одинаковое значение для разных идентификаторов транзакций.Если значение существует в двух документах для одного и того же идентификатора транзакции, он не должен печатать эти документы.Ниже приведено несколько примеров документов.

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, поскольку «Значение»: «abcd1234hjgn» существует для двух разных идентификаторов транзакции.Результат должен быть ниже.Как мне это сделать?

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

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

1 Ответ

0 голосов
/ 17 ноября 2018

Это долгий путь, но он дает результат.

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'
      }
    },

  ]

);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...