我正在尝试MongoDB的新管道查询,所以我尝试执行以下查询。
{
aggregate: 'Posts',
pipeline: [
{ $unwind: '$Comments'},
{ $match: {'$Comments.Owner': 'Harry' }},
{$group: {
'_id': '$Comments._id'
}
}
]
}
并且查询没有任何匹配,因此返回空结果。我猜问题可以在$ match命令上。我使用点缀符号匹配评论所有者但不确定它是否完全正确。为什么这个查询不会返回“Harry”的Ownders。我确信它存在于db。
中答案 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'
}
}
]
}