MongoDb中子文档字段的$ match运算符

时间:2011-12-28 22:45:23

标签: mongodb aggregation-framework

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

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

并且查询没有任何匹配,因此返回空结果。我猜问题可以在$ match命令上。我使用点缀符号匹配评论所有者但不确定它是否完全正确。为什么这个查询不会返回“Harry”的Ownders。我确信它存在于db。

2 个答案:

答案 0 :(得分:10)

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

试试这个:

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

答案 1 :(得分:-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'
        }
     }
   ]
}