처음 Mongodb에서 조회 연산자를 사용하여 이상한 것을 발견했습니다. 다음과 같이 보이는 2 개의 간단한 컬렉션이 있습니다.
Book
{
"_id": 1,
"Title": "Some book name",
"AuthorId": 1,
}
Author
{
"_id": 1,
"Name": "Some Author",
"Location": "US"
}
enter code here
또한 Book.AuthorId에 대한 인덱스가 있습니다.
내가 원했던 것은 미국 내 Authors
인 모든 Books
을 쿼리하는 것입니다. 그래서 문서를 읽고 .. 나는이 쿼리를 내놓았다 : 위대한 작품을
db.Book.aggregate([
{
$lookup: {
from: "Author",
localField: "AuthorId",
foreignField: "_id",
as: "author"
}
},
{
$unwind: "$author"
},
{
$match:{ "author.Location": {$eq: "US"}}
}
])
합니다. 그러나 호기심에서 프로파일 링을 켜고 위 쿼리를 실행할 때 Mongo가 한 일을 보았습니다. 놀랍게도 읽은 각 책에 대해 저자가 한 번 조회 한 것을 알았습니다. $lookup
연산자를 사용하는 요점은 이전에 모든 저자를 볼 필요가 없었기 때문에 여기서 잃어 버렸습니다. 나는 아무 것도 모으려하지 않을 것이다 .. 조회가 나에게 도움이되지 않는다면 적어도 $group
을 가짐 (적어도 나는 그렇게 생각한다 ... 내가 틀렸다면 나에게 계몽해라)
다음은 프로파일 링을 볼 수있다. 나는 쿼리를 실행한다 :
도구 프로파일 링과 출력을 참조하는 데 사용 않았다
그리고 프로파일에
, 나는 하나 개의 쿼리를 참조? Robo 3T처럼 보이지만 어느 곳에서도 프로파일 옵션을 찾을 수 없습니다. – PirateApp@PirateApp 먼저 프로파일 링 레벨을 2로 설정해야합니다. db.setProfilingLevel (2), db.system.profile.find ({ }). 정리하고 다시 시작하려면 다시 0으로 설정하고 db.system.profile.drop()로 프로파일을 삭제하십시오. – jpgrassi