Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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_Node.js_Mongodb_Mongoose_Aggregation Framework - Fatal编程技术网

Node.js 仅获取每个用户的一个文档-mongoDB

Node.js 仅获取每个用户的一个文档-mongoDB,node.js,mongodb,mongoose,aggregation-framework,Node.js,Mongodb,Mongoose,Aggregation Framework,我被mongo聚合查询卡住了。现在我有一个集合,其中包含各种用户的帖子,其详细信息显示在用户集合中 我需要一个查询来获取SQL中每个用户(如GroupBy)的一篇文章 张贴收集数据 这是我的问题 期望输出 您可以对不同的用户标识使用聚合阶段,然后使用来获取用户数据 db.col('posts').aggregate([ { "$match": { "language": 'english', "status": "A" }}, { "$sample": { "size": 10 }},

我被mongo聚合查询卡住了。现在我有一个集合,其中包含各种用户的帖子,其详细信息显示在用户集合中

我需要一个查询来获取SQL中每个用户(如GroupBy)的一篇文章

张贴收集数据

这是我的问题

期望输出

您可以对不同的用户标识使用聚合阶段,然后使用来获取用户数据

db.col('posts').aggregate([
  { "$match": { "language": 'english', "status": "A" }},
  { "$sample": { "size": 10 }},
  { "$sort": { "_id": -1 }},
  { "$group": {
    "_id": "$userId",
    "language": { "$first": "$language" },
    "status": { "$first": "$status" },
    "desc": { "$first": "$desc" }
  }},
  { "$lookup": {
    "from": "users",
    "localField": "_id",
    "foreignField": "_id",
    "as": "ownerData"
  }}
])
您可以对不同的用户标识使用聚合阶段,然后使用来获取用户数据

db.col('posts').aggregate([
  { "$match": { "language": 'english', "status": "A" }},
  { "$sample": { "size": 10 }},
  { "$sort": { "_id": -1 }},
  { "$group": {
    "_id": "$userId",
    "language": { "$first": "$language" },
    "status": { "$first": "$status" },
    "desc": { "$first": "$desc" }
  }},
  { "$lookup": {
    "from": "users",
    "localField": "_id",
    "foreignField": "_id",
    "as": "ownerData"
  }}
])
此外,还可以使用group和$last

此外,还可以使用group和$last

$group:将作为mysql的group by$第一:将从组中获取集合字段的第一个元素$查找在mysql中充当连接

db.tempdate.aggregate([ 
    { $group : 
        { 
          _id : "$userId", 
          language : { $first: '$language' }, 
          status : { $first: '$status' },  
          desc : { $first: '$desc' } 
        } 
     },
     { $lookup: 
        { 
            from: "user", 
            localField: "_id", 
            foreignField: "user_id",
            as: "userData" 
         } 
     }
 ]).pretty();`

Output

`{
    "_id" : "5b891370f43fe3302bbd8001",
    "language" : "english",
    "status" : "A",
    "desc" : "Hi there - 3",
    "userData" : [
        {
            "_id" : ObjectId("5ba3633a12b8613823f3056e"),
            "user_id" : "5b891370f43fe3302bbd8001",
            "name" : "Bhuwan"
        }
    ]
}
{
    "_id" : "5b891370f43fe3302bbd8918",
    "language" : "english",
    "status" : "A",
    "desc" : "Hi there",
    "userData" : [
        {
            "_id" : ObjectId("5ba3634612b8613823f3056f"),
            "user_id" : "5b891370f43fe3302bbd8918",
            "name" : "Harry"
        }
    ]
}
$group:将作为mysql的group by$第一:将从组中获取集合字段的第一个元素$查找在mysql中充当连接

db.tempdate.aggregate([ 
    { $group : 
        { 
          _id : "$userId", 
          language : { $first: '$language' }, 
          status : { $first: '$status' },  
          desc : { $first: '$desc' } 
        } 
     },
     { $lookup: 
        { 
            from: "user", 
            localField: "_id", 
            foreignField: "user_id",
            as: "userData" 
         } 
     }
 ]).pretty();`

Output

`{
    "_id" : "5b891370f43fe3302bbd8001",
    "language" : "english",
    "status" : "A",
    "desc" : "Hi there - 3",
    "userData" : [
        {
            "_id" : ObjectId("5ba3633a12b8613823f3056e"),
            "user_id" : "5b891370f43fe3302bbd8001",
            "name" : "Bhuwan"
        }
    ]
}
{
    "_id" : "5b891370f43fe3302bbd8918",
    "language" : "english",
    "status" : "A",
    "desc" : "Hi there",
    "userData" : [
        {
            "_id" : ObjectId("5ba3634612b8613823f3056f"),
            "user_id" : "5b891370f43fe3302bbd8918",
            "name" : "Harry"
        }
    ]
}

按用户分组,并按用户获取每个groupgroup的第一个元素,并获取每个group的第一个元素
db.getCollection('posts').aggregate([
  { "$match": { "language": 'english', "status": "A" }},
  { "$group": {
    "_id": "$userId",
     "primaryId" : { "$last": "$_id" },
    "language": { "$last": "$language" },
    "status": { "$last": "$status" },
    "desc": { "$last": "$desc" }
  }},
  { "$lookup": {
    "from": "users",
    "localField": "_id",
    "foreignField": "_id",
    "as": "ownerData"
  }},
  { $unwind:{path: '$ownerData',preserveNullAndEmptyArrays: true} //to convert ownerData to json object
}
])
db.tempdate.aggregate([ 
    { $group : 
        { 
          _id : "$userId", 
          language : { $first: '$language' }, 
          status : { $first: '$status' },  
          desc : { $first: '$desc' } 
        } 
     },
     { $lookup: 
        { 
            from: "user", 
            localField: "_id", 
            foreignField: "user_id",
            as: "userData" 
         } 
     }
 ]).pretty();`

Output

`{
    "_id" : "5b891370f43fe3302bbd8001",
    "language" : "english",
    "status" : "A",
    "desc" : "Hi there - 3",
    "userData" : [
        {
            "_id" : ObjectId("5ba3633a12b8613823f3056e"),
            "user_id" : "5b891370f43fe3302bbd8001",
            "name" : "Bhuwan"
        }
    ]
}
{
    "_id" : "5b891370f43fe3302bbd8918",
    "language" : "english",
    "status" : "A",
    "desc" : "Hi there",
    "userData" : [
        {
            "_id" : ObjectId("5ba3634612b8613823f3056f"),
            "user_id" : "5b891370f43fe3302bbd8918",
            "name" : "Harry"
        }
    ]
}