DBRef로 mongodb를 쿼리하는 방법
다음 데이터 구조가 있다고 가정합니다.
var user = {_id: 'foo', age: 35};
var post = {_id: '...', author: {$ref: user, $id: 'foo'},...};
user [foo]를 참조하는 모든 게시물을 쿼리하려면 어떻게해야합니까? 다음을 시도했지만 작동하지 않습니다.
db.post.find('author._id': 'foo');
var u = db.user.find({_id: 'foo'});
db.post.find('author': u);
공식 문서와 Google에서도 답을 찾을 수 없습니다!
누구나 아이디어가 있습니까?
알았다:
db.post.find({'author.$id': '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 } );
이것은 db.post.find('author.$id': 'foo')
누락 {}
되었으므로 올바른 문장은 다음과 같습니다.
db.post.find({'author.$id': 'foo'})
또한 다음을 통해 달성 할 수 있습니다.
db.post.find({'author': DBRef("user", ObjectId('foo'))})
그러나 첫 번째 방법은 더 작고 실용적입니다.
이것에 대한 Java 솔루션을 찾는 사람이라면 mongojack을 사용하는 경우 정말 쉽습니다.
collection.find(DBQuery.is("user", new DBRef(user.getId(), User.class)));
컬렉션은 JacksonDBCollection입니다.
mongoengine에서는 참조 된 객체의 인스턴스를 사용해야합니다. 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' 카테고리의 다른 글
한 파일에서 두 변경 집합 간의 차이점보기 (0) | 2021.01.14 |
---|---|
게임 개발을위한 D 프로그래밍 언어 (0) | 2021.01.14 |
"1 개 선택"은 무엇을합니까? (0) | 2021.01.14 |
strdup 또는 _strdup? (0) | 2021.01.14 |
Django : 400 잘못된 요청 구문-이 메시지는 무엇을 의미합니까? (0) | 2021.01.14 |