2017-03-20 17 views
0

こんにちは自分のページネゴシエーションを実装しようとしていますが、パブリケーションクエリを制限しようとすると次のエラーが発生します。パブリケーションの制限クエリ

Exception from sub Products id Xbd4EW32oob8fBPkk Error: must use ordered observe (ie, 'addedBefore' instead of 'added') with skip or limit

Meteor.publish('Products', function(user, options) { 
      if (organization && organization.categories) { 
       //find products in array of categories 
       let products = Products.find({ 
           categories: { 
             '$in': organization.categories 
           }      
          }, 
          {limit: 10} 
          ); 
       return products; 
      } else { 
       return []; 
      } 
     }); 

サブスクリプションコード:

Router.route('/products', { 
    name: 'products', 
    loadingTemplate: 'loading', 

    waitOn: function() { 
     // return one handle, a function, or an array 
     return Meteor.subscribe('Products', {limit: 10}); 
    }, 

    data: function() { 
     return Products.find({}); 
    }, 

    action: function() { 
     this.render('ProductCatalog'); 
    } 

}); 

フル・エラートレース:

I20170320-16:29:58.231(0)? Exception from sub Products id vDz4GLRXJ6s3cENeE Error: must use ordered observe (ie, 'addedBefore' instead of 'added') with skip or limit 
I20170320-16:29:58.233(0)?  at [object Object]._.extend.observeChanges (packages/minimongo/minimongo.js:325:13) 
I20170320-16:29:58.234(0)?  at [object Object].<anonymous> (packages/omknee:sales-process/sales-process.js:38:31) 
I20170320-16:29:58.235(0)?  at [object Object]._handler (packages/omknee:access-control/access-control.js:38:31) 
I20170320-16:29:58.236(0)?  at maybeAuditArgumentChecks (packages/ddp-server/livedata_server.js:1737:12) 
I20170320-16:29:58.236(0)?  at [object Object]._.extend._runHandler (packages/ddp-server/livedata_server.js:1035:17) 
I20170320-16:29:58.237(0)?  at [object Object]._.extend._startSubscription (packages/ddp-server/livedata_server.js:853:9) 
I20170320-16:29:58.238(0)?  at [object Object]._.extend.protocol_handlers.sub (packages/ddp-server/livedata_server.js:625:12) 
I20170320-16:29:58.239(0)?  at packages/ddp-server/livedata_server.js:559:43 
I20170320-16:29:58.246(0)? Auth Strategy - Local. User : {"user":{"email":"[email protected]"},"password":{"digest":"5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8","algorithm":"sha-256"}} 
+0

カーソルのどこかで 'observe'を行っているようです。あなたもそのコードを投稿できますか? – jordanwillis

+0

@jordanwillis私はどこでも私のアプリの中で観測を使用していません – MMrj

+0

どのバージョンの流星を使っていますか? – jordanwillis

答えて

1

があり、とにかくあなたの検索オプションにsortを追加することができます(通常はlimitsortと一緒に使用されています) 。ここで私はこの勧告を行う理由です。

カーソルを公開すると、Meteorは自動的にそのクエリにobserveを設定して、変更をサブスクライバに送信できるようにします。ただし、クエリがソートされると、meteorは自動的にobserveChangesを設定します。私はこの違いがエラーを引き起こしていると思います。 Meteorは 'observeChanges'の代わりに 'observe'を使用しました。

この状況に関する流星にはいくつかの問題が記録されています(例:#2766#1643)が、私は決着が入れられていないことがわかります。

sortオプションを追加する理由のもう1つは、Meteor won't be able to use the oplog for this queryです。言ったことすべて、私はを特定することはできませんなぜあなたはエラーを正確にを取得しているが、上記の、私はこれを推測していると

If your query has a limit but not a sort specifier, your query can't take advantage of oplog

何が起こっているかです。

+0

次のオプションで同じエラーが発生しています{sort:{name:1}、limit:10} – MMrj

+1

hmm ...ローカルでいくつかのものを試してみましょう私がこれを理解できるかどうかを見てください。 – jordanwillis

+0

@MMrj 'packages/omknee:sales-process/sales-process.js'のコードを投稿できますか? – jordanwillis

関連する問題