3

我正在尝试 MongoDB 的新管道查询,所以我尝试执行以下查询。

{
aggregate: 'Posts',
pipeline: [
    { $unwind: '$Comments'},
    { $match: {'$Comments.Owner': 'Harry' }},
    {$group: {
        '_id': '$Comments._id'
        }
     }
   ]
}

并且没有匹配到查询,所以返回空结果。我想问题可能出在 $match 命令上。我正在使用点符号匹配评论所有者,但不确定它是否完全正确。为什么此查询不返回 'Harry' 的所有者。我确信它存在于数据库中。

4

2 回答 2

12

您不使用字段名称的$前缀。$match

尝试这个:

{
  aggregate: 'Posts',
  pipeline: [
    { $unwind: '$Comments'},
    { $match: {'Comments.Owner': 'Harry' }},
    { $group: {
      '_id': '$Comments._id'
    }}
  ]
}
于 2012-12-05T01:49:47.453 回答
-1

我在 MongoDB 2.2 的聚合框架中遇到了同样的问题。

$match子文档对我不起作用(但我只是在学习 MongoDB,所以我可能会做错事)。

我添加了额外的投影来删除子文档(Comments在这种情况下):

{
aggregate: 'Posts',
pipeline: [
    { $unwind: '$Comments'},
    { $project: {
      comment_id: "$Comments._id",
      comment_owner: "$Comments.Owner"
    }},
    { $match: {'$comment_Owner': 'Harry' }},
    {$group: {
        '_id': '$comment_id'
        }
     }
   ]
}
于 2012-12-04T22:44:27.830 回答