0

私は瞬間的な日付範囲を繰り返し、ドキュメントを挿入しようとしています。次のエラーが発生します。

Exception while simulating the effect of invoking '/carpool_events/insert' 
Error
 Error: Sorting not supported on Javascript code
    at Error (<anonymous>)
    at Object.LocalCollection._f._cmp     (http://localhost:3000/packages/minimongo/selector.js?    5b3e1c2b868ef8b73a51dbbe7d08529ed9fb9951:251:13)
    at Object.LocalCollection._f._cmp     (http://localhost:3000/packages/minimongo/selector.js?    5b3e1c2b868ef8b73a51dbbe7d08529ed9fb9951:226:36)
    at LocalCollection._f._cmp (http://localhost:3000/packages/minimongo/selector.js?5b3e1c2b868ef8b73a51dbbe7d08529ed9fb9951:218:33)
    at _func (eval at <anonymous> (http://localhost:3000/packages/minimongo/sort.js?08a501a50f0b2ebf1d24e2b7a7f8232b48af9057:63:8), <anonymous>:1:51)
    at Function.LocalCollection._insertInSortedList     (http://localhost:3000/packages/minimongo/minimongo.js?7f5131f0f3d86c8269a6e6db0e2467e28eff6422:616:9)
    at Function.LocalCollection._insertInResults (http://localhost:3000/packages/minimongo/minimongo.js?7f5131f0f3d86c8269a6e6db0e2467e28eff6422:534:31)
    at LocalCollection.insert (http://localhost:3000/packages/minimongo/minimongo.js?7f5131f0f3d86c8269a6e6db0e2467e28eff6422:362:25)
    at m.(anonymous function) (http://localhost:3000/packages/mongo-livedata/collection.js?3ef9efcb8726ddf54f58384b2d8f226aaec8fd53:415:36)
    at http://localhost:3000/packages/livedata/livedata_connection.js?77dd74d90c37b6e24c9c66fe688e9ca2c2bce679:569:25 

これは、インサートを使用した私のループです。挿入する代わりにconsole.logに書き込むだけでループをテストしましたが、ループは正常に機能します

    'click button.save-addEventDialogue': function(e, tmpl) {

          var start = Session.get("showAddEventDialogue_dateRangeStart");
          var end = Session.get("showAddEventDialogue_dateRangeEnd");
          var dateRange = moment().range(moment(start),moment(end));
          var dateLoopIncrement = moment().range(moment(start),moment(start).add('days',1));

          console.log(dateRange);
          console.log(dateLoopIncrement);

          // Loop through the date range
          dateRange.by(dateLoopIncrement, function(moment) {
            // Do something with `moment`
            var dateToSave = dateRange.start;  

        // Insert the record
            Carpool_Events.insert({
                       owner: Meteor.user().profile.name,
                       owner_id: Meteor.userId(),
                       original_owner: Meteor.user().profile.name,
                       original_owner_id: Meteor.userId(),
                       declined: 0,
                                  date: dateToSave.toDate()
                      });
            dateToSave.add('days',1);
         });            

         // Clear the Session
         Session.set("showAddEventDialogue_dateRangeStart","");
         Session.set("showAddEventDialogue_dateRangeEnd","");

         // Close the dialogue
         Session.set("showAddEventDialogue", false);
       } 

これを行う正しい方法は何ですか?ありがとう。

4

2 に答える 2

0

エラーメッセージSorting not supported on Javascript codeは、JavaScript関数(!)をコレクションに挿入した結果です。たとえば、Carpool_Events.insert({x: function () { ... }});JavaScript関数のようなことを行うと、通常はコレクションに入れられません。

コードのどこかに、関数を呼び出さないタイプミスがある可能性があります(たとえば、Meteor.userId代わりにクライアントで書き込むMeteor.userId())。サーバーでコードを実行するプロセスで、偶然に修正または回避したと思います。これ。

コード内の問題を視覚的に見つけることができませんでした。間違っている場合は、さらに進歩させるために、再現しておくと役に立ちます。

于 2013-02-05T01:37:16.647 に答える
0

クライアントから一括挿入(ループへの挿入)を実行すると、問題が発生するようです。私がやったことは、Meteor.methodsを使用してサーバー側で挿入を実行することでした。これは、クライアントでこれを行う際の問題が何であれ、回避策のように見えました。

また、moment-rangeを使用して日付を繰り返す必要がないことにも気づきました。代わりに、私は瞬間を使用して日数の違いを取得し、それを繰り返します。

クライアントのJSコード:

'click button.save-addEventDialogue': function (e, tmpl) {
  var start = moment(Session.get("showAddEventDialogue_dateRangeStart"));
  var end = moment(Session.get("showAddEventDialogue_dateRangeEnd"));
  var days = end.diff(start, 'days');
  var count = 0;
  var dateToSave = moment(start);

  // Loop through the date range
  for (count; count <= days; count++) {
    Meteor.call('bulkInsertCarpoolEvent', Meteor.user(), dateToSave.toDate());
    dateToSave.add('days', 1);
  };

  // Clear the Session
  Session.set("showAddEventDialogue_dateRangeStart", "");
  Session.set("showAddEventDialogue_dateRangeEnd", "");

  // Close the dialogue
  Session.set("showAddEventDialogue", false);

  }

サーバー上:

Meteor.startup(function () {
  Meteor.methods({
    bulkInsertCarpoolEvent: function (user, date) {

      return Carpool_Events.insert({
        owner: user.profile.name,
        owner_id: this.userId,
        original_owner: user.profile.name,
        original_owner_id: this.userId,
        declined: 0,
        date: date
      });

    }
  });
});
于 2013-02-03T03:51:53.593 に答える