Javascript MongoDB-动态从ID获取数据
我有这个样本数据 职位 类别Javascript MongoDB-动态从ID获取数据,javascript,database,mongodb,aggregation-framework,backend,Javascript,Database,Mongodb,Aggregation Framework,Backend,我有这个样本数据 职位 类别 [{ _id: ObjectId("5b87979c10397d6c12d69513"), name: 'Funny', type: 1 }, { _id: ObjectId("5b8797ab24098febfb05abdd"), name: 'Sad', type: 1 }, { _id: ObjectId("5b8797b24e31ebf7603f3c3e"), name: 'Romantic', type: 2 }] 最后一个是关系 [{
[{
_id: ObjectId("5b87979c10397d6c12d69513"),
name: 'Funny',
type: 1
},
{
_id: ObjectId("5b8797ab24098febfb05abdd"),
name: 'Sad',
type: 1
},
{
_id: ObjectId("5b8797b24e31ebf7603f3c3e"),
name: 'Romantic',
type: 2
}]
最后一个是关系
[{
_id: ObjectId("5b879818763ecd6f1c54d306"),
postID: ObjectId("507f1f77bcf86cd799439011"),
categoryID: ObjectId("5b87979c10397d6c12d69513")
},
{
_id: ObjectId("5b8798eb040890fb2a88c0af"),
postID: ObjectId("507f1f77bcf86cd799439011"),
categoryID: ObjectId("5b8797b24e31ebf7603f3c3e"),
}]
当我在Mongo中使用$lookup时,我得到如下结果:
{
_id: ObjectId("507f1f77bcf86cd799439011"),
name: 'Foo',
categories: [{
_id: ObjectId("5b879818763ecd6f1c54d306"),
postID: ObjectId("507f1f77bcf86cd799439011"),
categoryID: ObjectId("5b87979c10397d6c12d69513")
},
{
_id: ObjectId("5b8798eb040890fb2a88c0af"),
postID: ObjectId("507f1f77bcf86cd799439011"),
categoryID: ObjectId("5b8797b24e31ebf7603f3c3e"),
}]
}
{
_id: ObjectId("507f1f77bcf86cd799439011"),
name: 'Foo',
categories: [{
_id: ObjectId("5b87979c10397d6c12d69513"),
name: 'Funny',
type: 1
},
{
_id: ObjectId("5b8797b24e31ebf7603f3c3e"),
name: 'Romantic',
type: 2
}]
}
在本例中,这是我在关系中的所有示例数据,无论如何,如何仅获取类别数据而不是关系数据,我希望获得如下内容:
{
_id: ObjectId("507f1f77bcf86cd799439011"),
name: 'Foo',
categories: [{
_id: ObjectId("5b879818763ecd6f1c54d306"),
postID: ObjectId("507f1f77bcf86cd799439011"),
categoryID: ObjectId("5b87979c10397d6c12d69513")
},
{
_id: ObjectId("5b8798eb040890fb2a88c0af"),
postID: ObjectId("507f1f77bcf86cd799439011"),
categoryID: ObjectId("5b8797b24e31ebf7603f3c3e"),
}]
}
{
_id: ObjectId("507f1f77bcf86cd799439011"),
name: 'Foo',
categories: [{
_id: ObjectId("5b87979c10397d6c12d69513"),
name: 'Funny',
type: 1
},
{
_id: ObjectId("5b8797b24e31ebf7603f3c3e"),
name: 'Romantic',
type: 2
}]
}
您可以从mongodb3.6
db.collection.aggregate([
{ "$match": { "_id": ObjectId("507f1f77bcf86cd799439011") } },
{ "$lookup": {
"from": "Relationship",
"let": { "categoryID": "$_id" },
"pipeline": [
{ "$match": { "$expr": { "$eq": [ "$categoryID", "$$categoryID" ] } } },
{ "$lookup": {
"from": "Category",
"let": { "categoryID": "$categoryID" },
"pipeline": [
{ "$match": { "$expr": { "$eq": [ "$_id", "$$categoryID" ] } } }
],
"as": "category"
}},
{ "$unwind": "$category" },
{ "$replaceRoot": { "newRoot": "$category" }}
],
"as": "categories"
}}
])
三个系列之间是否存在一对一关系?你的mongodb版本是什么?是的,就像Wordpress和他的分类法一样,我的mongo版本高于3.6,很抱歉,我不能准确键入版本,因为我现在没有电脑。没问题,使用mongodb 3.6很容易做到。如何做到这一点?起首部分:bas mate:)