【问题标题】:how can i aggregate in mongodb?我如何在 mongodb 中聚合?
【发布时间】:2018-01-09 18:41:08
【问题描述】:

我这里有两个集合点集合和用户集合我想根据用户ID做聚合

  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"), “名称”:“juir”, "手机号码":"9611",

}

如何进行聚合

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

我想合并这两个集合 帮助我前进

【问题讨论】:

  • 你需要用文字描述你想做什么。你需要什么结果?您需要聚合中用户集合中的一些字段吗?
  • 我需要合并两个集合是的,我需要来自用户集合@AsyaKamsky 的所有字段
  • 所以只使用 localField "userid" 和 foreignField "_id"
  • 您没有指定 users 中具有 ObjectId 的字段名称是什么,但我假设它是“_id”字段。
  • 请停止向 cmets 发送有关无关问题的垃圾邮件,要求人们回答这个问题。这些 cmets 已全部删除。

标签: mongodb aggregation-framework


【解决方案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"
    }
  }
])

【讨论】:

  • 我应该只得到 "store":"001", ISODate("2017-11-10T08:15:39.736Z") 和 "name":"asdf"
  • 在您的 store: 001 中有 2 个用户,为什么您只想获得名称 asdf?你的实际情况是什么,你应该在你的问题中清楚地描述你的标准,你想要什么等等......@itsme
  • store: 001 有两个用户(可能是多个用户)但有时我只想知道那个特定的用户(按名称查找)
  • 也想按店铺找?
  • 想在两个日期之间按商店查找,名称
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 1970-01-01
  • 2017-09-03
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多