我怎么能在mongodb聚合?

时间:2017-11-22 18:30:05

标签: mongodb aggregation-framework

我有两个收集点集合和用户集合,我想根据用户标识进行聚合

  points collection           
{
    "userpoint": "2",
    "purchaseid":"dj04944",
    "store":"001",
    "date":ISODate("2017-11-10T08:15:39.736Z")
    "userid"[
    objectID("5a7565ug8945rt67"),
    objectID("8a35553d3446rt78")
    ]
},
{
    "userpoint": "4",
    "purchaseid":"5678sd",
     "store":"004",
    "date":ISODate("2017-11-11T08:15:39.736Z")
    "userid"[
     objectID("9a85653d3890rt09")
    ]
}

users collection

{
   objectID("5a7565ug8945rt67"),
   "name":"asdf",
   "mobinumber":"12345",

},
{
   objectID("8a35553d3446rt78"),
   "name":"qwr",
   "mobinumber":"11111",

},

{        的objectID(" 9a85653d3890rt09&#34),        "名称":" juir&#34 ;,        " mobinumber":" 9611",

}

我该怎么做聚合

db.points.aggregate([
    {
      $lookup:
        {
          from: "users",
          localField: "",
          foreignField: "",
          as: "inventory_docs"
        }
   }
])

我想结合两个集合 帮助我前进

1 个答案:

答案 0 :(得分:1)

如果您的预期输出如下所示

{
    "_id" : ObjectId("5a164fa5400096bfa0b3422c"),
    "date" : ISODate("2017-11-10T08:15:39.736Z"),
    "name" : "asdf",
    "mobile" : "12345"
}

可以尝试此查询

db.points.aggregate([
{
    $match: {
      store: "001",
      date: {$lte: ISODate("2017-11-10T08:15:39.736Z"), $gte: ISODate("2017-11-10T08:15:39.736Z")}
    }
  },
  {$unwind: "$userid"},
  {
    $lookup: {
      from: "users",
      localField: "userid",
      foreignField: "_id",
      as: "user"
    }
  },
  {
    $project: {
      userpoint: 1,
      purchaseid: 1,
      date: 1,
      user: {$arrayElemAt: ["$user", 0]}
    }
  },
  {$match: {"user.name": "asdf"}},
  {
    $project: {
      date: 1,
      name: "$user.name",
      mobile: "$user.mobinumber"
    }
  }
])