mongodb查找具有相同键值的文档,但不知道该值是多少

mongodb查找具有相同键值的文档,但不知道该值是多少,mongodb,aggregation-framework,mongo-shell,Mongodb,Aggregation Framework,Mongo Shell,我收集了以下文件: {'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}

我收集了以下文件:

{'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} 
您可以使用with
po_no
,然后使用筛选出计数小于1的文档

输出

[
  {
    "_id": "456",
    "amount": 0.1
  },
  {
    "_id": "456",
    "amount": 0.4
  }
]
您可以使用并检查
金额
是否大于
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
        }
    }
])

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
        }
    }
])