当前位置: 首页 > 知识库问答 >
问题:

MongoDB聚合、MongoDB查询

孙钱青
2023-03-14

我使用Nodejs和MongoDB与expressjs和mongoose库,创建一个具有用户、文章和评论模式的博客API。下面是我使用的模式。

const UsersSchema = new mongoose.Schema({
    username:        { type: String },
    email:           { type: String },
    date_created:    { type: Date },
    last_modified:   { type: Date }
});    




const ArticleSchema = new mongoose.Schema({
    id:              { type: String, required: true },
    text:            { type: String, required: true }, 
    posted_by:       { type: Schema.Types.ObjectId, ref: 'User', required: true },
    images:          [{ type: String }],
    date_created:    { type: Date },
    last_modified:   { type: Date }
});




const CommentSchema = new mongoose.Schema({
    id:             { type: String, required: true },
    commented_by:   { type: Schema.Types.ObjectId, ref: 'User', required: true },
    article:        { type: Schema.Types.ObjectId, ref: 'Article' },
    text:           { type: String, required: true },
    date_created:   { type: Date },
    last_modified:  { type: Date } 
});

共有1个答案

王建华
2023-03-14

您可以使用MongoDB3.6及更高版本中的$lookup以下聚合

Article.aggregate([
  { "$match": { "posted_by": mongoose.Types.ObjectId(id) } },
  { "$lookup": {
    "from": Comment.collection.name,
    "let": { "id": "$_id" },
    "pipeline": [
      { "$match": { "$expr": { "$eq": [ "$article", "$$id" ] } } }
    ],
    "as": "comments"
  }},
  { "$addFields": {
    "comments_no": { "$size": "$comments" },
    "hasCommented": { "$in": [mongoose.Types.ObjectId(id), "$comments.commented_by"] }
  }}
])
 类似资料:
  • 主要内容:aggregate() 方法,管道MongoDB 中的聚合操作用来处理数据并返回计算结果,聚合操作可以将多个文档中的值组合在一起,并可对数据执行各种操作,以返回单个结果,有点类似于 SQL 语句中的 count(*)、group by 等。 aggregate() 方法 您可以使用 MongoDB 中的 aggregate() 方法来执行聚合操作,其语法格式如下: db.collection_name.aggregate(aggr

  • 假设我有一个MongoDB集合,其中包含以下信息: 我想计算按州分组的订单总价的总和,其中项目为“苹果”,颜色为“红色”。我的问题是: 但是,我希望能够将我的结果cust\u id包含在\u id中,它是一个数组/映射/一些结构,其中包含构成我的合计的所有客户id的列表。因此,我希望我的输出包含 是否有办法处理此mongo聚合/查询?或者是一种更好的方式来构造此查询,以便我可以按州分组计算红苹果的

  • 但在我看来不对。有人能建议别的方法做这件事吗。

  • 我有包含以下模式的文档的集合。我想过滤/查找所有包含性别女性的文档并汇总大脑评分的总和。我尝试了下面的语句,它显示了无效的管道错误。 架构:

  • 有人能帮我把这个mongoDB聚合转换成Spring数据mongo吗? 我试图在每个邀请函文件中获得未提醒与会者的电子邮件列表。 让它在mongo shell中运行,但需要在Spring data mongo中运行。 我的shell查询 ) 正如你们所看到的,这是我提出的,它在管道的项目和团队运作中并没有像预期的那样发挥作用。下面给出了生成的查询。 聚合对象创建 它创建以下查询 聚合对象生成的查询

  • 并给我带来这些结果: {“_id”:{“name”:“city1”},“count”:212} {“_id”:{“name”:“city2”},“count”:1200} https://hexdocs.pm/mongodb/readme.html#贡献 提前谢了。