mongoDB 展开后对文档进行分组
mongoDB group documents after unwind
在我的 mongodb books
collection 中,我有如下文档:
{
_id: ObjectId(625efa44f1ba751c8275ea51),
contributors:[ObjectId(625efa44f1ba751c8275ea52), ObjectId(625efa44f1ba751c8275ea53)]
//other fields
}
我想做一个查询,returns 我记录如下:
{
_id: ObjectId(625efa44f1ba751c8275ea51),
contributors:[
{
_id: ObjectId(625efa44f1ba751c8275ea52),
first_name: 'Luigi'
//many other fields
},
{
_id: ObjectId(625efa44f1ba751c8275ea53),
first_name: 'Mario'
//many other fields
},
]
//other fields
}
我对贡献者进行了 unwind
,对我的 users
collection 进行了 lookup
,现在我需要将它们分组。我以前没用过,但我做了类似的事情:
{
$group:{
_id: '_id'
}
}
但我不知道下一步该怎么做才能保留书籍和用户的所有字段。
你有什么想法吗?
如果 $lookup
结果足够小 (<16MB document size limit),
你可以简单地做一个 $lookup
.
db.books.aggregate([
{
"$lookup": {
"from": "users",
"localField": "contributors",
"foreignField": "_id",
"as": "contributors"
}
}
])
这里是Mongo Playground供您参考。
如果 $lookup
结果将超过 16 MB 限制,您仍然可以 $unwind. Just use
$firstto regroup the other fields after the
$unwind`
db.books.aggregate([
{
"$lookup": {
"from": "users",
"localField": "contributors",
"foreignField": "_id",
"as": "contributors"
}
},
{
"$unwind": "$contributors"
},
{
"$group": {
"_id": "_id",
bookName: {
$first: "$bookName"
},
"contributors": {
"$push": "$contributors"
}
}
}
])
这里是Mongo playground供您参考。
在我的 mongodb books
collection 中,我有如下文档:
{
_id: ObjectId(625efa44f1ba751c8275ea51),
contributors:[ObjectId(625efa44f1ba751c8275ea52), ObjectId(625efa44f1ba751c8275ea53)]
//other fields
}
我想做一个查询,returns 我记录如下:
{
_id: ObjectId(625efa44f1ba751c8275ea51),
contributors:[
{
_id: ObjectId(625efa44f1ba751c8275ea52),
first_name: 'Luigi'
//many other fields
},
{
_id: ObjectId(625efa44f1ba751c8275ea53),
first_name: 'Mario'
//many other fields
},
]
//other fields
}
我对贡献者进行了 unwind
,对我的 users
collection 进行了 lookup
,现在我需要将它们分组。我以前没用过,但我做了类似的事情:
{
$group:{
_id: '_id'
}
}
但我不知道下一步该怎么做才能保留书籍和用户的所有字段。
你有什么想法吗?
如果 $lookup
结果足够小 (<16MB document size limit),
你可以简单地做一个 $lookup
.
db.books.aggregate([
{
"$lookup": {
"from": "users",
"localField": "contributors",
"foreignField": "_id",
"as": "contributors"
}
}
])
这里是Mongo Playground供您参考。
如果 $lookup
结果将超过 16 MB 限制,您仍然可以 $unwind. Just use
$firstto regroup the other fields after the
$unwind`
db.books.aggregate([
{
"$lookup": {
"from": "users",
"localField": "contributors",
"foreignField": "_id",
"as": "contributors"
}
},
{
"$unwind": "$contributors"
},
{
"$group": {
"_id": "_id",
bookName: {
$first: "$bookName"
},
"contributors": {
"$push": "$contributors"
}
}
}
])
这里是Mongo playground供您参考。