mongodb находит документы с одинаковым значением ключа, но не знает, что это за значение - PullRequest
2 голосов
/ 22 марта 2019

У меня есть следующие документы в коллекции:

{'po_no': '456', 'amount': 0.1}
{'po_no': '455', 'amount': 0.2}
{'po_no': '454', 'amount': 0.3}
{'po_no': '456', 'amount': 0.4}

Мне нравится находить документы с одинаковым значением для po_no, но я не знаю, какое значение для ключа;поэтому будет найден следующий результат:

{'po_no': '456', 'amount': 0.1}
{'po_no': '456', 'amount': 0.4} 

Ответы [ 2 ]

2 голосов
/ 22 марта 2019

Вы можете использовать $ group , а затем установить amount $ size , чтобы оно было больше 1:

db.col.aggregate([
    {
        $group: {
            _id: "$po_no",
            amount: { $push: "$amount" }
        }
    },
    {
        $match: {
            $expr: {
                $gt: [ { $size: "$amount" }, 1 ]
            }
        }
    },
    {
        $unwind: "$amount"
    },
    {
        $project: {
            _id: 0,
            po_no: "$_id",
            amount: 1
        }
    }
])

MongoDB детская площадка

2 голосов
/ 22 марта 2019

Вы можете использовать $group с po_no, а затем отфильтровать документы, количество которых меньше 1, с помощью $match

db.collection.aggregate([
  { "$group": {
    "_id": "$po_no",
    "count": { "$sum": 1 },
    "amount": { "$push": "$amount" }
  }},
  { "$match": { "count": { "$gt": 1 }}},
  { "$unwind": "$amount" },
  { "$project" : { "count": 0 }}
])

выход

[
  {
    "_id": "456",
    "amount": 0.1
  },
  {
    "_id": "456",
    "amount": 0.4
  }
]
...