2017-04-24 4 views
1
db.audiofiles.aggregate({ 
    $match: { 
     privacy: { $ne: "same" }, 
     date: { "$eq": "2017/04/25" }, 
     deleted: 0 
    }, 
    $group: { "_id": "$to_email" } 
}); 

私は$matchを使用しましたが、依然として以下のようなパイプラインエラーを示しています。集約パイプラインは、「パイプラインステージ指定オブジェクトには正確に1つのフィールドが必要」というエラーをスローします。

assert: command failed: { 
    "ok" : 0, 
    "errmsg" : "A pipeline stage specification object must contain exactly one field.", 
    "code" : 16435 
} : aggregate failed 
+0

パイプラインは配列です。カッコ間に角括弧を追加します。 –

+0

db.audiofiles.aggregate({[$ {match:{{$ ne: "same"}、date:{"$ eq": "2017/04/25"}、deleted:0]}、$ group: {"_id": "$ to_email"}}}); 計算されたプロパティ名@(シェル)のエラー: - > 2017-04-24T14:46:37.021 + 0530 E QUERY [thread1] SyntaxError:missing]:1:32 – Jagadeesh

答えて

3

arrayにパイプラインステージを配置する必要があります。つまり、ドキュメントは順番にステージを通過します。

db.collection.aggregate([ { <stage> }, ... ]) 

$groupパイプラインステップ演算子はない$matchパイプラインステップの一部として、独自のオブジェクト/文書であるべきです。あなた集計パイプラインは

db.audiofiles.aggregate([ 
    /* match pipeline */ 
    { 
     "$match": { 
      "privacy": { "$ne": "same" }, 
      "date": { "$eq": "2017/04/25" }, 
      "deleted": 0 
     } 
    }, 
    /* group pipeline */ 
    { 
     "$group": { 
      "_id": "$to_email", 
      "count": { "$sum": 1 } 
     } 
    } 
]); 

であるか、あなたは配列にプッシュすることができ、オブジェクト変数としてパイプラインステップを作成し、その配列は、aggregate()メソッドの引数として使用するためのパイプラインになっ必要があります。

/* match pipeline */ 
var match = { 
    $match: { 
     privacy: { $ne: "same" }, 
     date: { "$eq": "2017/04/25" }, 
     deleted: 0 
    } 
}, 
/* group pipeline */ 
group = { 
    $group: { 
     "_id": "$to_email", 
     "count": { "$sum": 1 } 
    } 
}; 

db.audiofiles.aggregate([match, group]); 

上記の応答が得られない場合は、1ステップで集約パイプラインを実行してみてください。

db.audiofiles.aggregate([match]); 

マッチステップの結果は次のステージにパイプされるので、結果が得られない場合、$matchパイプラインステップで一致するドキュメントが見つかりませんでした。いくつかのパラメータを変更して結果があるかどうかを確認します。

+0

上記クエリを入力しても応答が得られませんでした私のmongoターミナルで? – Jagadeesh

+0

これは、 '$ match'パイプラインが一致するものを返さないか、間違ったコレクションで集合演算を実行していることを意味します。デバッグのために '$ match'パイプラインで別のパラメータを試してみるか、' $ group'ステップだけでパイプラインを実行してドキュメントを返すかどうか確認してください。 – chridam

+0

audiofiles.aggregate({$ group:{"_ id": "$ to_email"}}); audiofiles.find({privacy:{$ ne: "same"}、date:{"$ eq": "24/04/2017"}この質問を入力すると、 、削除:0}})。 上記のクエリを入力した場合、私は応答のセットを取得しています。 – Jagadeesh

関連する問題