如何在输出中仅显示数组元素

问题描述

我有这样的文件。如何在输出中仅显示数组元素。

{
_id: ObjectId("5effaa5662679b5af2c58829"),email: “email@example.com”,name: {given: “Jesse”,family: “Xiao”},age: 31,addresses: [{label: “home”,street: “101 Elm Street”,city: “Springfield”,state: “CA”,zip: “90000”,country: “US”},{label: “mom”,street: “555 Main Street”,city: “Jonestown”,province: “Ontario”,country: “CA”}]
}

我的查询

{ "$project": { _id : 0,"addresses.country": 1 }  }

期望输出

"country": “...”

实际输出

{ 
    "addresses" : [
        {
            "country" : "..."
        }
    ]
}

解决方法

您可以使用聚合

  • $unwind 解构数组
  • $match 匹配国家/地区
  • $replaceRoot 使其成为根目录

这是代码

db.collection.aggregate([
  { "$unwind": "$addresses" },{ "$match": { "addresses.country": "CA" } },{ "$replaceRoot": { "newRoot": "$addresses" } }
])

工作Mongo playground

,

简短的回答是您使用排除。使用 field:0 排除。所以在 find 语句之后你会添加如下内容:db.project.find({..},{_id:0:,label:0,city:0..etc})

,

解决了

        { "$unwind" : "$addresses" },{
            "$project" : {
                _id:0.0,"addresses" : "$addresses._id"
            }
        }