복붙노트

[MONGODB] DBRef와 MongoDB를를 조회하는 방법

MONGODB

DBRef와 MongoDB를를 조회하는 방법

나는 다음과 같은 데이터 구조를 가지고 가정 :

var user = {_id: 'foo', age: 35};
var post = {_id: '...', author: {$ref: user, $id: 'foo'},...};

어떻게 모든 게시물되는 참조 사용자 [foo는]을 조회 할 수 있습니다? 나는 다음과 같은 있지만 작업을 시도했다 :

db.post.find('author._id': 'foo');
var u = db.user.find({_id: 'foo'});
db.post.find('author': u);

나도 공식 문서에서 답을 찾을 수없고 구글 수 있습니다!

사람은 어떤 생각을 가지고?

해결법

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

    1.알았다:

    알았다:

    db.post.find({'author.$id': 'foo'})
    
  2. ==============================

    2.당신은. $ 아이디 참조를 사용할 수 있지만 해당 필드에 어떤 인덱스를 무시합니다. 난 당신이 단자를 통해 직접 쿼리 또는 빠르게 뭔가를보고 싶어하지 않는 그 방법을 무시하고 건의 할 것입니다. 큰 컬렉션을 사용하는 당신은 인덱스에 필드를 원하고이 법 아래를 사용하여 쿼리합니다.

    당신은. $ 아이디 참조를 사용할 수 있지만 해당 필드에 어떤 인덱스를 무시합니다. 난 당신이 단자를 통해 직접 쿼리 또는 빠르게 뭔가를보고 싶어하지 않는 그 방법을 무시하고 건의 할 것입니다. 큰 컬렉션을 사용하는 당신은 인덱스에 필드를 원하고이 법 아래를 사용하여 쿼리합니다.

    당신은 다음을 사용하여 인덱스 쿼리를 사용하려면 :

    db.post.find('author' : { "$ref" : 'user', "$id" : 'foo' , "$db" :'database_name' })
    

    foo는 객체 ID가있는 경우

    db.post.find('author' : { "$ref" : 'user', "$id" : ObjectId('foo') , "$db" :'database_name' })
    

    다음과 같은 방법으로 저자에 인덱스를 만들 수 있습니다

    db.post.ensureIndex( {'author' : 1 } );
    
  3. ==============================

    3.( '. 저자 $ 아이디': '푸')이 db.post.find이 빠져는 {}, 올바른 문장은 그래서 :

    ( '. 저자 $ 아이디': '푸')이 db.post.find이 빠져는 {}, 올바른 문장은 그래서 :

    db.post.find({'author.$id': 'foo'})
    

    또한이는 달성 될 수있다 :

    db.post.find({'author': DBRef("user", ObjectId('foo'))})
    

    그러나 첫 번째 방법보다 컴팩트하고 실용적입니다.

  4. ==============================

    4.당신이 mongojack는 정말 쉽게 사용하는 경우 다음이에 자바 솔루션을 찾고있는 사람들을위한 :

    당신이 mongojack는 정말 쉽게 사용하는 경우 다음이에 자바 솔루션을 찾고있는 사람들을위한 :

    collection.find(DBQuery.is("user", new DBRef(user.getId(), User.class)));
    

    어디 모음은 JacksonDBCollection이다.

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

    5.mongoengine에서 당신은 참조 된 개체의 인스턴스를 사용해야합니다. 그것은 ID가 설정되어 있어야합니다. 저자는 저자의 문서 인스턴스입니다 가정하자. 이 사용 그래서 :

    mongoengine에서 당신은 참조 된 개체의 인스턴스를 사용해야합니다. 그것은 ID가 설정되어 있어야합니다. 저자는 저자의 문서 인스턴스입니다 가정하자. 이 사용 그래서 :

    Post.objects(author__eq=author)
    

    당신은이 작성자의 모든 게시물을 통해 갈 수 있습니다. Post.author는 ReferenceField로 정의되어야한다

  6. ==============================

    6.몽고 2.4.1 버전을 사용하여

    몽고 2.4.1 버전을 사용하여

    이것은 당신이 OLA 수집을 위해 명령 줄에서 그것을 할 방법입니다 @DBRef dbrefName

    db.OLA.find ({ "dbref Name.some fieldValue의": "개인"});

    정확한 쿼리

    db.OLA.find ({ "dbrefName $의 ID입니다.": ObjectId가 ( "1234")});

  7. from https://stackoverflow.com/questions/6195286/how-to-query-mongodb-with-dbref by cc-by-sa and MIT license