如何在MongoDB中的"group by"之后将字段内的文档取出?
How to get the document inside a field out after "group by" in MongoDB?
我处理的文档是这样的:
{
"id" : "98syf87erfw8n"
"foo" : { "objectid" : "39", "stuff" : "65" },
"yearpublished" : "1979",
.
.
.
}
这是我使用的查询:
db.foobar.aggregate([
{ $group : {
_id : '$yearpublished',
myItem: { $first: "$$ROOT" }
}}
])
最终输出形式为:
{
{ "_id" : "1923", "myItem" : {
"id" : "98syf87erfw8n",
"foo" : { "objectid" : "39", "stuff" : "65" },
"yearpublished" : "1979"
}
},
{ "_id" : "1453", "myItem" : {
"id" : "88888888888",
"foo" : { "objectid" : "394", "stuff" : "55" },
"yearpublished" : "1453"
"author" : "Ravi Kiran"
}
}
};
但我希望输出为:
{
"id" : "98syf87erfw8n",
"foo" : { "objectid" : "39", "stuff" : "65" },
"yearpublished" : "1979"
},
{
"id" : "88888888888",
"foo" : { "objectid" : "394", "stuff" : "55" },
"yearpublished" : "1453",
"author" : "Ravi Kiran"
}
意思是我要把myItem
字段里面的那些文件弄出来。
我该怎么做?
$group 可以完成工作后的另一个项目阶段:
{
$project: {
yearpublished: "$myItem.yearpublished",
foo: "$myItem.foo",
id: "$myItem.id",
_id: 0
}
}
你可以使用 $replaceRoot
db.collection.aggregate({
"$replaceRoot": {
"newRoot": "$myItem"
}
})
您的输出中存在语法错误。
"id" : 98syf87erfw8n
,无效。
应该是"id" : "98syf87erfw8n"
,注意引号
第二个对象 yearPublished
后缺少逗号。
我处理的文档是这样的:
{
"id" : "98syf87erfw8n"
"foo" : { "objectid" : "39", "stuff" : "65" },
"yearpublished" : "1979",
.
.
.
}
这是我使用的查询:
db.foobar.aggregate([
{ $group : {
_id : '$yearpublished',
myItem: { $first: "$$ROOT" }
}}
])
最终输出形式为:
{
{ "_id" : "1923", "myItem" : {
"id" : "98syf87erfw8n",
"foo" : { "objectid" : "39", "stuff" : "65" },
"yearpublished" : "1979"
}
},
{ "_id" : "1453", "myItem" : {
"id" : "88888888888",
"foo" : { "objectid" : "394", "stuff" : "55" },
"yearpublished" : "1453"
"author" : "Ravi Kiran"
}
}
};
但我希望输出为:
{
"id" : "98syf87erfw8n",
"foo" : { "objectid" : "39", "stuff" : "65" },
"yearpublished" : "1979"
},
{
"id" : "88888888888",
"foo" : { "objectid" : "394", "stuff" : "55" },
"yearpublished" : "1453",
"author" : "Ravi Kiran"
}
意思是我要把myItem
字段里面的那些文件弄出来。
我该怎么做?
$group 可以完成工作后的另一个项目阶段:
{
$project: {
yearpublished: "$myItem.yearpublished",
foo: "$myItem.foo",
id: "$myItem.id",
_id: 0
}
}
你可以使用 $replaceRoot
db.collection.aggregate({
"$replaceRoot": {
"newRoot": "$myItem"
}
})
您的输出中存在语法错误。
"id" : 98syf87erfw8n
,无效。
应该是"id" : "98syf87erfw8n"
,注意引号
第二个对象 yearPublished
后缺少逗号。