Mongoldb聚合检查数组中的字段值出现了多少次?

发布于 2025-01-16 06:40:03 字数 551 浏览 3 评论 0原文

我有一个文档集合,看起来像这个

{
 _id : 21353456,
product : "xy",
text : "asdf",
reviews : [
{
     username : "User1",
     userID: 12
     text : "hi",
     },
     {
     username : "User2",
     userID: 123
     text : "hi1",
     }
    ]
}

用户可以对不同的产品进行多次评论,我想检索所有至少进行了 3 次评论的用户。我想查看评论数量、评论者姓名和 ID(按字母顺序排列)。 我已经尝试过这段代码,但它不起作用

db.reviews.aggregate([{ 
  $group:{ 
    "_id": "$userID", "$userName","$text" 
    "numRev":{$numRev:{}}}}, {$match:{"numRev":{$gte: 3}}}, {$sort: {"reviewerName" : 1}}]) 

I have a collection of documents that look like this

{
 _id : 21353456,
product : "xy",
text : "asdf",
reviews : [
{
     username : "User1",
     userID: 12
     text : "hi",
     },
     {
     username : "User2",
     userID: 123
     text : "hi1",
     }
    ]
}

users can make multiple reviews on different products, I want to retrieve all the users that have made at least 3 reviews. I want to see the number of reviews, the reviewer name and id in alphabetic order.
I have tried this code but it doesn't work

db.reviews.aggregate([{ 
  $group:{ 
    "_id": "$userID", "$userName","$text" 
    "numRev":{$numRev:{}}}}, {$match:{"numRev":{$gte: 3}}}, {$sort: {"reviewerName" : 1}}]) 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不知在何时 2025-01-23 06:40:03

也许是这样的:

db.collection.aggregate([
{
  $unwind: "$reviews"
},
{
  $group: {
    _id: "$reviews.username",
    userID: {
      $last: "$reviews.userID"
    },
    reviewsNum: {
      $sum: 1
    }
  }
 },
 {
   $match: {
     reviewsNum: {
       $gte: 3
     }
   }
  },
  {
    $sort: {
      _id: 1
   }
  }
])

解释:

  1. 展开评论数组
  2. 按用户名分组,以便获得每个用户的评论数
  3. 仅匹配那些评论 >=3
  4. 按 _id-> 排序用户名。

游乐场

Maybe something like this:

db.collection.aggregate([
{
  $unwind: "$reviews"
},
{
  $group: {
    _id: "$reviews.username",
    userID: {
      $last: "$reviews.userID"
    },
    reviewsNum: {
      $sum: 1
    }
  }
 },
 {
   $match: {
     reviewsNum: {
       $gte: 3
     }
   }
  },
  {
    $sort: {
      _id: 1
   }
  }
])

Explained:

  1. Unwind the reviews array
  2. Group by username so you get the count of reviews per user
  3. Match only those reviews >=3
  4. Sort by _id-> the username.

playground

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文