Javascript 以文档数组的一致格式显示数据

Javascript 以文档数组的一致格式显示数据,javascript,mongodb,mongodb-query,aggregation-framework,Javascript,Mongodb,Mongodb Query,Aggregation Framework,我有一个收集个人邮件的文件数组 { "Name" : "A", "Email" : [ { "EmailAddress" : "a@home.com", "EmailType" : "Home" }, { "EmailAddress" : "a@work.com", "EmailType" : "Work" } ] } { "Name" : "B", "Email" : [ { "EmailAddress" : "b@work.com", "EmailType" : "Work" } ] } {

我有一个收集个人邮件的文件数组

{ "Name" : "A", "Email" : [ { "EmailAddress" : "a@home.com", "EmailType" : "Home" }, { "EmailAddress" : "a@work.com", "EmailType" : "Work" } ] }
{ "Name" : "B", "Email" : [ { "EmailAddress" : "b@work.com", "EmailType" : "Work" } ] }
{ "Name" : "C" }
我必须以以下格式显示数据,即如果我们一个人没有家庭/工作地址,如果家庭或工作电子邮件不可用,最好以相同的顺序显示为“无数据”(家庭电子邮件优先,工作电子邮件其次)

我想用$unwind或$switch函数来实现它。建议请

有可能:

db.collection.aggregate([
{“$project”:{
“名称”:1,
“电子邮件”:{
“$map”:{
“输入”:[“家”、“工作”],
“as”:“m”,
“在”:{
“$ifNull”:[
{“$arrayElemAt”:[
{“$filter”:{
“输入”:“$Email”,
“as”:“e”,
“cond”:{“$eq”:[“$$e.EmailType”,“$$m”]}
}},
0
]},
{“EmailAddress”:“无数据”,“EmailType”:“$$m”}
]
}
}
}
}}
])
产生:

{
“_id”:ObjectId(“591e7d66cb1a9433dab779cc”),
“姓名”:“A”,
“电子邮件”:[
{
“电子邮件地址”:”a@home.com",
“电子邮件类型”:“主页”
},
{
“电子邮件地址”:”a@work.com",
“电子邮件类型”:“工作”
}
]
}
{
“_id”:ObjectId(“591e7d66cb1a9433dab779cd”),
“名称”:“B”,
“电子邮件”:[
{
“电子邮件地址”:“无数据”,
“电子邮件类型”:“主页”
},
{
“电子邮件地址”:”b@work.com",
“电子邮件类型”:“工作”
}
]
}
{
“_id”:ObjectId(“591e7d66cb1a9433dab779ce”),
“姓名”:“C”,
“电子邮件”:[
{
“电子邮件地址”:“无数据”,
“电子邮件类型”:“主页”
},
{
“电子邮件地址”:“无数据”,
“电子邮件类型”:“工作”
}
]
}
但就我个人而言,我会在客户端代码中进行转换,因为它不那么迟钝。作为一个快速shell示例:

db.collection.find().forEach(doc=>{
doc.Email=[“家”、“工作”].map(m=>{
如果(!doc.hasOwnProperty('Email'))
doc.Email=[];
var val=doc.Email.filter(e=>e.EmailType==m)[0];
返回(val==null)?{“EmailAddress”:“无数据”,“EmailType”:m}
:val;
});
printjson(doc);
})

基本上,尽管您使用“家”和“工作”的“统一”数组作为
$map
的源,然后查找当前
电子邮件
数组中的元素。在查找中返回
null
的任何内容都将与默认数据交换。

您不认为,您正在尝试NO-SQL的SQL输入错误结果吗?对我必须将此数据与csv输入源进行比较..我是mongo db的新手,正在检查mongo中是否有方法。您正在保存“无数据”,它反映未保存任何信息,只是不保存NULL您正在保存此。所以,我相信当你们在比较时,这里的数据字段是缺失的,这反映出你们并没有数据。谢谢你们,尼尔。您的解决方案为我提供了许多有关mongo查询的信息
{ "Name" : "A", "Email" : [ { "EmailAddress" : "a@home.com", "EmailType" : "Home" }, { "EmailAddress" : "a@work.com", "EmailType" : "Work" } ] }
{ "Name" : "B", "Email" : [ { "EmailAddress" : "No Data", "EmailType" : "Home" }, { "EmailAddress" : "b@work.com", "EmailType" : "Work" } ] }
{ "Name" : "C", "Email" : [ { "EmailAddress" : "No Data", "EmailType" : "Home" }, { "EmailAddress" : "No Data", "EmailType" : "Work" } ] }