3

MongoDB の新しいパイプライン クエリを試しているので、以下のクエリを実行してみます。

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

クエリに一致するものがないため、空の結果が返されます。問題は $match コマンドにあると思います。ドット表記の一致コメント所有者を使用していますが、それが正確かどうかはわかりません。このクエリが 'Harry' である所有者を返さない理由。私はそれがdbに存在すると確信しています。

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 に答える