10

mongo を更新したところ、ログに次のエラーが表示されました: Use of the aggregate command without the cursor option is deprecated

Mongo は、現在の使用法が推奨されていないため、集約関数に 2 つ目の REQUIRED パラメータを追加する必要があると言っています。

現在、次のコードPHPを使用しています(現在は非推奨です):

$this->db->{$collection}->aggregate($options);

そして、この形式を返します:

{"result":[
    {
    "_id":"xxxxxx",
    "update":[
    {
    "firstUpdateTime":xxxxxx,
    "updateTime":xxxxxxx,
    }
    ],
    "media":[
    {
    "xxxx":{ ...

非推奨のコードを使用しないために、新しい 2 番目のパラメーターを追加します (ただし、何を入力すればよいかわかりません)。

$this->db->{$collection}->aggregate($options, array('cursor' => array('batchSize' => 101)));

これは同じ情報を返しますが、初期構造が異なります。

{"cursor":{
"id":{
"value":"xxxxxx"
},
"ns":"xxxxxx.instagram",
"firstBatch":[
{
"_id":"xxxxxx",
"update":[
{
"firstUpdateTime":xxxxxx,
"updateTime":xxxxxx,
}
],
"media":[
{
"xxxxxx":{ ...

更新後、Mongo はデータの読み取り方法を変更するよう強制します。「cursor」という 2 番目のパラメーターにどの値を入力すればよいかわかりません...

その 2 番目のパラメーターには何を入力すればよいですか? 結果の構造を変更せずにデフォルト値を設定できますか?

ドキュメント: https://docs.mongodb.com/manual/reference/method/db.collection.aggregate/ http://php.net/manual/es/mongocollection.aggregate.php

アップデート:

関数でカーソルを指定すると、エラーが発生しなくなりました。しかし、解決策に適用せずにログを読むと、警告がランダムに表示されます。コードを数回実行すると、前述の警告が報告され、他の警告が報告されない場合があります。

なんで?

4

6 に答える 6

2

最新の MongoDB マニュアルから集計操作が変更されました。

カーソルなしの集計

MongoDB 3.4 では、パイプラインに Explain オプションが含まれていない限り、cursor オプションを指定せずに aggregate コマンドを使用することは推奨されていません。集計コマンドを使用して集計結果をインラインで返す場合は、デフォルトのバッチ サイズ カーソル: {} を使用してカーソル オプションを指定するか、カーソル オプション カーソル: { batchSize: } でバッチ サイズを指定します。

[ "cursor" => [ "batchSize" => 0 ] ]2番目のパラメーターがこれを解決するので、追加して関数呼び出しにそのパラメーターを指定するだけです。ここを参照してください。

カーソル パラメータの使用法については、この SOの質問を参照することもできます。

于 2017-05-08T15:12:36.617 に答える