programing

DBef를 사용하여 mongodb를 쿼리하는 방법

magicmemo 2023. 5. 21. 11:19
반응형

DBef를 사용하여 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);

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

아무도 몰라요?

알겠습니다.

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

이것.db.post.find('author.$id': 'foo')를 놓쳤습니다.{}따라서 올바른 문장은 다음과 같습니다.

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

또한 다음을 통해 이를 달성할 수 있습니다.

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

하지만 첫 번째 방법은 더 작고 실용적입니다.

.$id 참조를 사용할 수 있지만 해당 필드의 인덱스는 무시됩니다.단말기를 통해 직접 문의하거나 빠르게 조회하고 싶은 경우가 아니라면 그 방법을 무시하는 것이 좋습니다.대용량 컬렉션을 사용할 때는 아래 방법을 사용하여 필드를 인덱싱하고 쿼리합니다.

다음을 사용하여 인덱스 조회를 사용하려는 경우:

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

mongojack을 사용하고 있다면 이에 대한 Java 솔루션을 찾는 사람은 매우 쉽습니다.

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

여기서 collection은 Jackson DB Collection입니다.

mongo 엔진에서는 참조된 객체의 인스턴스만 사용해야 합니다.ID가 설정되어 있어야 합니다.작성자가 작성자 문서 인스턴스라고 가정합니다.사용 방법:

Post.objects(author__eq=author)

당신은 이 작가의 모든 게시물을 살펴볼 수 있습니다.Post.author를 ReferenceField로 정의해야 합니다.

Mongo 2.4.1 버전 사용

OLA 수집을 위한 명령줄에서 수행하는 방법은 다음과 같습니다.@DBRef dbrefName

db.OLA.find({"dbrefName.someFieldValue" : "Personal"});

정확한 질의

db.OLA.find({"dbrefName.$id" : ObjectId("1234")});

언급URL : https://stackoverflow.com/questions/6195286/how-to-query-mongodb-with-dbref

반응형