首页 > 解决方案 > mongoDB 查找数组中的所有文档,但每次匹配只返回一个

问题描述

我想在每个邮政编码中获得一个商店位置...

我已经得到了邮政编码中的所有商店,

{ "address.zip": { $in: ['10003','10038','10121','12401'] } }

我将如何只返回一个每个 zip?

哪个 ONE,只有一个 - 任何 ONE 都没有关系...但是,如果我想取回一个特定的一个或一个在 store 对象中具有某些属性的 ONE,我该怎么做?

结构:

{
    "store_name": "McPhersons",
    "address": {
        "street1": "23 N LA GRANGE RD",
        "city": "LA GRANGE",
        "state": "IL",
        "postal_code": "60525",
        "country": "USA"
    }
}

标签: mongodb

解决方案


您可以在此处使用聚合查询。像这样的东西

db.collection.aggregate([
 {$match: { "address.zip": { $in: ['10003','10038','10121','12401'] } }},
 {$group: {_id: "$address.zip", store_name: {$first: "$store_name"}, id: {$first: "$_id"}, address: {$first: "$address"}},
 {$project: {_id: "$id", store_name: "$store_name", address: "$address"}
]);

因此,在上面的查询中,我们使用 过滤$match,然后使用 进行分组address.zip,只获取第一个匹配项,然后根据原始集合投影数据。


推荐阅读