2013-02-02 5 views
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에 루프를 작성하여 테스트 했으므로 루프가 올바르게 작동합니다.

올바른 방법은 무엇입니까? 감사.

답변

0

오류 메시지 Sorting not supported on Javascript code 콜렉션에 자바 스크립트 함수 삽입의 결과 - 예를 들어 Carpool_Events.insert({x: function() { ... }}); JavaScript 함수는 일반적으로 콜렉션에 포함되어서는 안됩니다.

어딘가에 함수를 호출하지 않는 경우가있을 수 있습니다 (예 : Meteor.userId() 대신 클라이언트에서 Meteor.userId을 작성하는 경우). 내 생각에 서버에서 코드를 실행하는 과정에서 , 우연히이를 고정 시키거나 피하게됩니다.

코드에서 문제를 시각적으로 발견 할 수 없었습니다. 제가 잘못하면 더 많은 발전을 이루려면 복제가 도움이 될 것입니다.

+0

[여기] (여기까지) (https://github.com/meteor/meteor/issues/660) – shinank

+0

새 프로젝트에서 이것을 재현 할 수 없으므로 내가하고있는 일이라고 가정합니다. 이 특정 시나리오에서 삽입이 작동하려면 클라이언트에서 정렬 조건을 제거하고 서버에서 정렬 조건 만 남겨 둡니다. – shinank

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 
     }); 

    } 
    }); 
}); 
관련 문제