所以我有一个MongoDB文档,看起来像这样:
Awards
:
[
{
"year": "2017",
"winners": [
{
"name": "james",
"id": 1
},
{
"name": "adam",
"id": 2
}
]
},
{
"year": "2018",
"winners": [
{
"name": "mary",
"id": 3
},
{
"name": "jane",
"id": 4
}
]
}
]
而且我基本上是在尝试扩大每年的获奖者,以便使纲要大致成为(year, winner_id)
我以后可以将其用于计划参加的工作。像这样:
[
{
"year":"2017",
"winner_id":1
},
{
"year":"2017",
"winner_id":2
},
{
"year":"2018",
"winner_id":3
},
{
"year":"2018",
"winner_id":4
}
]
如此直观地讲,我在寻找类似的东西$unwind
,但问题是那winners
不是数组。
我尝试过,db.awards.aggregate({'$unwind':'$winners.id'})
但是没有用。(结果为空)
所以后来我想,db.awards.aggregate({'$unwind': {'$objectToArray':'$winners.id'}})
但这也不起作用。(出现错误)
根据这篇文章,我应该这样做:
db.awards.aggregate(
{ '$project': {
_id: 1,
'winners': 1
} },
{'$unwind': '$winners'},
{'$unwind': '$winners.id'}
)
但是即使这样也行不通,我仍然获得了每个文档的嵌入文档 winner
有什么想法吗?
您的数据是无效的JSON。假设该winners
属性很可能是一个数组。
我可以在聚合命令中看到三个其他问题:
aggregate
函数。$project
聚合管道中的语法不同。您没有定义应包括哪些字段。您确实定义了实际的映射winners
数组。我认为做$unwind
投影前比较容易
db.awards.aggregate(
[
{
$unwind: { path: '$winners' }
},
{
$project: {
year: '$year',
winner_id: '$winners.id'
}
}
]
);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句