我想展平我的数据模型以csv格式导出。 我想我可以通过聚合达到目标,但是我不知道怎么做,
该模型由一些对象数组组成,我想投影 对象的某些字段以及主要对象的其他字段。
我有一个看起来像这样的模型
{
"_id" : ObjectId,
"email" : string,
"dates" : {
"registered" : ISODate,
"last_activity" : ISODate
},
"autos" : [
{
"_id" : ObjectId,
"make" : string,
"model" : string,
"color" : string
}
],
"boats": [
{
"_id" : ObjectId,
"manu" : string,
"model" : string,
"motor" : string
}
]
}
这是我对聚合管道的了解
db.users.aggregate( [
{ $unwind: "$autos" },
{
$project: {
_id: 1,
email: 1,
'dates.registered': 1,
'autos.make': 1,
'autos.model': 1
}
}
] )
我的回报看起来像这样
{
"_id" : ObjectId(),
"dates" : {
"registered" : ISODate()
},
"email" : "...",
"autos" : {
"make" : "...",
"model" : "..."
}
}
但是我希望我的退货看起来像这样:
{
"_id" : ObjectId(),
"registered" : ISODate(),
"email" : "..."
"auto_make" : "...",
"auto_model" : "..."
}
,并采取后续措施-是否可以展开第二个阵列“船” 在同一查询中???
所以我的结果看起来像这样
{
"_id" : ObjectId(),
"registered" : ISODate(),
"email" : "...",
"auto_model" : "...",
"auto_color" : "...",
"boat_model" : "...",
"boat_motor" : "...",
}
答案 0 :(得分:1)
对于汽车的品牌和型号,您可以通过将expression
放入$project
的键值对内的value字段中来轻松实现。
关于船的型号和发动机,您可以重做对汽车的操作以获取结果
db.users.aggregate( [
{ $unwind: "$autos" }, //this line can be removed if you want the result to be an array instead of a string
{
$project: {
_id: 1,
email: 1,
registered: '$dates.registered',
auto_make: '$autos.make',
auto_model: '$autos.model'
}
}
] )
output: (with unwind)
{
"_id" : ObjectId("5d15aa446810eb770fd47f7c"),
"email" : "string",
"registered" : ISODate("2019-06-28T05:48:52.652Z"),
"auto_make" : "string",
"auto_model" : "string"
},
{
"_id" : ObjectId("5d15aa446810eb770fd47f7c"),
"email" : "string",
"registered" : ISODate("2019-06-28T05:48:52.652Z"),
"auto_make" : "string",
"auto_model" : "string"
},
{
"_id" : ObjectId("5d15aa446810eb770fd47f7c"),
"email" : "string",
"registered" : ISODate("2019-06-28T05:48:52.652Z"),
"auto_make" : "string",
"auto_model" : "string"
}
output: (without unwind))
{
"_id" : ObjectId("5d15aa446810eb770fd47f7c"),
"email" : "string",
"registered" : ISODate("2019-06-28T05:48:52.652Z"),
"auto_make" : [
"string",
"string",
"string"
],
"auto_model" : [
"string",
"string",
"string"
]
}
已更新:都展开
此示例为2个自动3条船的1位用户提供6个输出文档
db.temp.aggregate( [
{ $unwind: "$autos" },
{ $unwind: "$boats" },
{
$project: {
_id: 1,
email: 1,
registered: '$dates.registered',
auto_make: '$autos.make',
auto_model: '$autos.model',
boat_model: '$boats.model',
boat_motor: '$boats.motor'
}
}
] )