私はmongoを初めて使用し、クエリにmongodb集計フレームワークを使用します。特定の条件を満たすレコード(ページネーションと並べ替えを含む)を取得し、レコードの総数を取得する必要があります。
次に、次の手順を実行します。
$match
演算子の作成
{ "$match" : { "year" : "2012" , "author.authorName" : { "$regex" : "au" , "$options" : "i"}}}
- 並べ替えとページ付けを追加
{ "$sort" : { "some_field" : -1}} , { "$limit" : 10} , { "$skip" : 0}
クエリを実行すると、期待どおりの結果が得られます。すべてのフィールドに10個のドキュメントがあります。
ページネーションについては、これらの条件を満たすレコードの総数(私の場合は25)を知る必要があります。
次のクエリを使用してカウントを取得します:{ "$match" : { "year" : "2012" , "author.authorName" : { "$regex" : "au" , "$options" : "i"}}} , { "$group" : { "_id" : "$all" , "reviewsCount" : { "$sum" : 1}}} , { "$sort" : { "some_field" : -1}} , { "$limit" : 10} , { "$skip" : 0}
ただし、 2つの別々のクエリを実行したくありません。1つはドキュメントの取得用で、もう1つは特定の条件を満たすレコードの総数です。
1つのクエリでそれを実行し、次の形式で結果を取得したい:
{
"result" : [
{
"my_documets": [
{
"_id" : ObjectId("512f1f47a411dc06281d98c0"),
"author" : {
"authorName" : "author name1",
"email" : "email1@email.com"
}
},
{
"_id" : ObjectId("512f1f47a411dc06281d98c0"),
"author" : {
"authorName" : "author name2",
"email" : "email2@email.com"
}
}, .......
],
"total" : 25
}
],
"ok" : 1
}
グループ演算子を変更しようとしました: { "$group" : { "_id" : "$all" , "author" : "$author" "reviewsCount" : { "$sum" : 1}}}
しかし、この場合、次のようになりました: "例外:グループ集計フィールド'author'はオブジェクト内の式として定義する必要があります"。_idにすべてのフィールドを追加すると、すべてのレコードが異なるため、reviewsCountは常に=1になります。
単一のクエリでどのように実装できるか誰も知りませんか?たぶんmongodbにはこの場合のいくつかの機能や演算子がありますか?2つの個別のクエリを使用して実装すると、数千または数百万のレコードをクエリするパフォーマンスが低下します。私のアプリケーションでは、これは非常に重大なパフォーマンスの問題です。
私はこれに一日中取り組んできましたが、解決策を見つけることができなかったので、stackoverflowコミュニティに目を向けると思いました。
ありがとう。