mongoDB在一个数组中找到所有documnet,但是每场比赛只返回一个

时间:2018-12-15 23:24:14

标签: mongodb

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

我已经找到了所有邮政编码所在的商店,

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

我每个拉链只退回一个?

哪一个都不重要,只要一个-任何一个... 但是,如果我想找回一个特定的对象或一个在存储对象中具有某些属性的对象,我该怎么做?

结构:

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

1 个答案:

答案 0 :(得分:1)

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

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进行分组并仅获得第一个匹配项,然后根据原始集合投影数据。 / p>