Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js mongodb(聚合)-$lookup和查找结果_Node.js_Mongodb_Aggregation Framework - Fatal编程技术网

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