2013-08-24 2 views
4

유성의 컬렉션에 여러 문서를 한 번에 추가하고 싶습니다.collection.insert()를 통해 여러 문서를 유성에 추가 할 수 있습니까?

MongoDB는 2.2이 지원

db.collection.insert([{docNumber: 1},{docNumber: 2}]) 

는 유성에서이 동작을 달성 할 수 있습니까? 예 :

myCollection.insert([{docNumber: 1},{docNumber: 2}]) 

현재이 문서는 하나의 문서로 추가됩니다. 유감스럽게도 iterator를 사용하지 않을 수 있습니다. 유스 케이스가 100,000 개가 넘는 문서를로드하고 있기 때문입니다. 이것은 단일 삽입으로 느려지 게하는 것입니다.

답변

7

유성에서는 아직 일괄 삽입이 가능하지 않습니다. 당신은 당신이 배열

var docs = [{docNumber: 1},{docNumber: 2}]; 

_.each(docs, function(doc) { 
    myCollection.insert(doc); 
}); 

문서를 삽입 할 수 있도록 반복자를 만들 수 있지만 대량 삽입 방법을 노출 수정의 비트와 함께,이기는하지만 서버 측에 그것을 할 수 수 있습니다. 이것에 대한 문제는이 코드가 클라이언트 측에서 작동하지 않는다는 것입니다.

+1

감사합니다, 내가 가진하지만 난> 100'000 문서를로드 할 수 NEET 유스 케이스 :

insertBulk = function(collection, documents){ if(collection) { return _.compact(_.map(documents, function(item){ if(_.isObject(item)) { var _id = collection._makeNewID(); // insert with reactivity only on the last item if(_.last(documents) === item) _id = collection.insert(item); // insert without reactivity else { item._id = _id; collection._collection._docs._map[_id] = item; } return _id; } })); } } 

당신은 removebulk() 여기에 기능을 포함하여 예제 스크립트를 찾을 수 있습니다. 이것은 단지 이런 식으로 느려지는 것입니다. – loomi

+1

https://github.com/meteor/meteor/tree/devel/packages/mongo-livedata 패키지를 살펴보고 새로운 2.2 일괄 삽입 방법을 제공하는 대량 삽입 기능을 추가하는 것이 좋습니다. 이것에 대한 문제는 공식적인 대량 삽입 방법을 만들기 전까지 유령을 최신 버전으로 유지하기 위해 계속해야한다는 것입니다. 100,000 개가 넘는 문서를 활용하면 유익한 정보를 얻을 수 있습니다. – Akshat

+0

Akshat가 정확하고 영감이 필요한 경우 다음 PR을 사용할 수 있습니다. https://github.com/meteor/meteor/pull/1254 –

6

나는 대량 삽입을위한 간단한 스크립트를 작성했다. 그것은 반응성이없는 콜렉션에 문서를 삽입함으로써 클라이언트 측에서만 작동합니다. 마지막 항목 만 반응 계산을 호출합니다. 이 솔루션에 대한 https://gist.github.com/frozeman/88a3e47679dd74242cab

+0

이것은 클라이언트를위한 멋진 솔루션이며, 실제로 속도를 높여야합니다! 나는 지금 서버에서 똑같은 것을 찾고있다. – loomi

관련 문제