복붙노트

[MONGODB] 또 다른 컬렉션에 MongoDB를 컬렉션의 저장 부분 집합

MONGODB

또 다른 컬렉션에 MongoDB를 컬렉션의 저장 부분 집합

그래서 같은 세트가

{date: 20120101}
{date: 20120103}
{date: 20120104}
{date: 20120005}
{date: 20120105}

어떻게 다른 컬렉션에 날짜 '20120105'에 해당 문서의 일부를 저장합니까?

즉 db.subset.save (db.full_set.find ({날짜 : "20120105"}));

해결법

  1. ==============================

    1.다음은 쉘 버전입니다 :

    다음은 쉘 버전입니다 :

    db.full_set.find({date:"20120105"}).forEach(function(doc){
       db.subset.insert(doc);
    });
    

    참고 : MongoDB를 2.6로, 통합 프레임 워크는 빨리이 일을 가능하게한다; 자세한 내용은 MELAN의 답변을 참조하십시오.

  2. ==============================

    2.새로운 해결책으로 그 문제에 대한 집계 프레임 워크를 사용하는 권합니다 :

    새로운 해결책으로 그 문제에 대한 집계 프레임 워크를 사용하는 권합니다 :

    db.full_set.aggregate ([{$ 일치 : {날짜 : "20120105"}}, {$ 아웃 : "집합"}]);

    그것은 100 배 빠른 대해 forEach보다 적어도 내 경우에 대해 작동합니다. 찾기 () 및 삽입 ()을 기반으로하는 솔루션 다시 다음 서버에서 클라이언트로 모든 문서를 보내고하는 반면, 전체 집계 파이프 라인의 mongod 프로세스에서 실행되기 때문입니다. 이것은 서버와 클라이언트가 동일한 시스템에있는 경우에도, 성능이 저하됩니다.

  3. ==============================

    3.사실,에 ... MongoDB의에서 선택 SQL의 삽입의 동등한이있다. 첫째, 당신은 문서의 배열로 여러 문서를 변환; 당신은 대상 컬렉션에 배열을 삽입

    사실,에 ... MongoDB의에서 선택 SQL의 삽입의 동등한이있다. 첫째, 당신은 문서의 배열로 여러 문서를 변환; 당신은 대상 컬렉션에 배열을 삽입

    db.subset.insert(db.full_set.find({date:"20120105"}).toArray())
    
  4. ==============================

    4.가장 일반적인 해결책은 이것이다 :

    가장 일반적인 해결책은 이것이다 :

    집계 (@melan에 의해 주어진 답)의 만들기 사용 :

    db.full_set.aggregate({$match:{your query here...}},{$out:"sample"})
    db.sample.copyTo("subset")
    

    이 동작하기 전에 "집합"문서는 당신이 그 "이전"문서를 보존하고 단지에 새 집합 삽입 할 경우에도이 작동합니다.

    사항 copyTo () 명령은 같은 _id와 문서를 바꾸기 때문에 관리는주의해야합니다.

  5. ==============================

    5.에 ... 선택 SQL의 삽입의 직접 해당이 없습니다 ....

    에 ... 선택 SQL의 삽입의 직접 해당이 없습니다 ....

    당신은 그것을 스스로 알아서해야합니다. 관심의 문서를 가져 오기 다른 컬렉션에 저장합니다.

    당신은 쉘에서 그것을 할 수 있습니다,하지만 난 루비의 작은 외부 스크립트를 사용하십시오. 이 같은:

    require 'mongo'
    
    db = Mongo::Connection.new.db('mydb')
    
    source = db.collection('source_collection')
    target = db.collection('target_collection')
    
    source.find(date: "20120105").each do |doc|
      target.insert doc
    end
    
  6. ==============================

    6.MongoDB의 새로운 모음으로 하위 집합을 저장할 수있는 운영자 밖으로 $와 함께 집계 있습니다. 다음 세부 사항은 다음과 같습니다 :

    MongoDB의 새로운 모음으로 하위 집합을 저장할 수있는 운영자 밖으로 $와 함께 집계 있습니다. 다음 세부 사항은 다음과 같습니다 :

    밖으로 $는 집계 파이프 라인에 의해 반환되는 문서를 취득 해 지정된 컬렉션에 기록합니다.

    구문 :

    { $out: "<output-collection>" }
    

    예 모음 책은 다음과 같은 문서가 포함되어 있습니다 :

    { "_id" : 8751, "title" : "The Banquet", "author" : "Dante", "copies" : 2 }
    { "_id" : 8752, "title" : "Divine Comedy", "author" : "Dante", "copies" : 1 }
    { "_id" : 8645, "title" : "Eclogues", "author" : "Dante", "copies" : 2 }
    { "_id" : 7000, "title" : "The Odyssey", "author" : "Homer", "copies" : 10 }
    { "_id" : 7020, "title" : "Iliad", "author" : "Homer", "copies" : 10 }
    

    책 컬렉션에서 데이터를 다음의 통합 작업을 선회는 저자에 의해 그룹화 제목이 다음 저자 컬렉션에 결과를 기록합니다.

    db.books.aggregate( [
      { $group : { _id : "$author", books: { $push: "$title" } } },
        { $out : "authors" }
    ] )
    

    수술 후, 저자의 수집은 다음과 같은 문서가 포함되어 있습니다 :

    { "_id" : "Homer", "books" : [ "The Odyssey", "Iliad" ] }
    { "_id" : "Dante", "books" : [ "The Banquet", "Divine Comedy", "Eclogues" ] }
    

    묻는 질문에서 쿼리를 다음 사용하고 새로운 컬렉션 데이터베이스에 'col_20120105를'라는 이름 얻을 것이다

     db.products.aggregate([
      { $match : { date : "20120105" } },
      { $out : "col_20120105" }
    ]);
    
  7. from https://stackoverflow.com/questions/9711529/save-subset-of-mongodb-collection-to-another-collection by cc-by-sa and MIT license