Node.js mongodb(聚合)-$lookup和查找结果
我是聚合框架的新手,有以下问题 我的收藏如下: 用户Node.js mongodb(聚合)-$lookup和查找结果,node.js,mongodb,aggregation-framework,Node.js,Mongodb,Aggregation Framework,我是聚合框架的新手,有以下问题 我的收藏如下: 用户 _id: ObjectId('604caef28aa89e769585f0c4') baseData: { firstName: "max" username: "max_muster" ... ... } _id: ObjectId('604caf718aa89e769585f0c8') "baseDa
_id: ObjectId('604caef28aa89e769585f0c4')
baseData: {
firstName: "max"
username: "max_muster"
...
...
}
_id: ObjectId('604caf718aa89e769585f0c8')
"baseData": {
"userID":"604caef28aa89e769585f0c4",
"type":0,
"title":"Alessandro send you a friend request.",
"description":"",
"actionID":"604caef28aa89e769585f0c4"
},
活动提要
_id: ObjectId('604cb97c99bbd77b54047370')
userID: "604caef28aa89e769585f0c4" // the user id
activity: "604caf718aa89e769585f0c8" // the activity id
viewed: false
活动
_id: ObjectId('604caef28aa89e769585f0c4')
baseData: {
firstName: "max"
username: "max_muster"
...
...
}
_id: ObjectId('604caf718aa89e769585f0c8')
"baseData": {
"userID":"604caef28aa89e769585f0c4",
"type":0,
"title":"Alessandro send you a friend request.",
"description":"",
"actionID":"604caef28aa89e769585f0c4"
},
聚合函数
const response = ActivityFeed.aggregate([
{
$match: { userID: ObjectId(args.user) },
},
{
$lookup: {
from: 'activities',
localField: 'activity',
foreignField: '_id',
as: 'lookup_activities',
},
},
{ $unwind: '$activities' },
{
$lookup: {
from: 'users',
localField: 'lookup_activities.baseData.actionID',
foreignField: '_id',
as: 'lookup_users',
},
},
]);
如何使用第一个查找结果进行查找
我查找了“活动”集合。此集合保存第二次查找baseData.userID的id。但是使用这种方法,第二次查找没有结果
我加入activities集合的原因是actionID可以保存另一个集合中的用户id或文档id。它取决于“活动”集合中的类型
在聚合框架中,是否可以根据上一次查找的类型和类型进行查找
提前感谢您。我所做的只是修复您的聚合。您解开了错误的字段,请确保所有ID字段都是ObjectId。如果您不熟悉聚合功能,我强烈建议使用来帮助聚合。他们有一个分阶段的帮助GUI,这会让你的生活更轻松 使用的样本
db={
"users": [
{
_id: ObjectId("604caef28aa89e769585f0c4"),
baseData: {
firstName: "max",
username: "max_muster"
}
}
],
"activitiesFeed": [
{
_id: ObjectId("604cb97c99bbd77b54047370"),
userID: ObjectId("604caef28aa89e769585f0c4"),
activity: ObjectId("604caf718aa89e769585f0c8"),
viewed: false
}
],
"activities": [
{
_id: ObjectId("604caf718aa89e769585f0c8"),
"baseData": {
"userID": ObjectId("604caef28aa89e769585f0c4"),
"type": 0,
"title": "Alessandro send you a friend request.",
"description": "",
"actionID": ObjectId("604caef28aa89e769585f0c4")
},
}
]
}
它非常适合我:D谢谢@Koodies你知道是否有可能改变循环结果吗?结果是baseData{….}是否可以删除baseData,结果只是键?是的,请查看$project或$set