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
'programing' 카테고리의 다른 글
spacy Windows 10 및 Python 3.5.3에서 'en_core_web_sm' 모델을 찾을 수 없음 :: 아나콘다 사용자 지정(64비트) (0) | 2023.05.21 |
---|---|
Mongoose, 찾기, 특정 속성 반환 (0) | 2023.05.21 |
목표-C에서 메서드 오버로드? (0) | 2023.05.21 |
Cygwin에 Pip-3.2 설치 (0) | 2023.05.21 |
'마이크로소프트.SqlServer.Azure에서 Types 버전 10 이상을 찾을 수 없습니다. (0) | 2023.05.21 |