[MONGODB] MongoDB의에서 $ 조회 여러 컬렉션에 참여하는 방법
MONGODBMongoDB의에서 $ 조회 여러 컬렉션에 참여하는 방법
나는 총 $ 조회를 사용하여 MongoDB에서 두 개 이상의 컬렉션에 참가하고 싶다. 그것은 가입 할 수 있습니까? 나에게 몇 가지 예를 제공합니다.
여기에 세 가지 컬렉션을 가지고 :
사용자 :
{
"_id" : ObjectId("5684f3c454b1fd6926c324fd"),
"email" : "admin@gmail.com",
"userId" : "AD",
"userName" : "admin"
}
사용자 정보:
{
"_id" : ObjectId("56d82612b63f1c31cf906003"),
"userId" : "AD",
"phone" : "0000000000"
}
userrole :
{
"_id" : ObjectId("56d82612b63f1c31cf906003"),
"userId" : "AD",
"role" : "admin"
}
해결법
-
==============================
1.는 MongoDB를 3.2 이상 버전에서 지원하는 기능을 가입 할 수 있습니다. 당신은 집계 쿼리를 사용하여 조인 사용할 수 있습니다. 당신은 예를 아래에 사용하여 수행 할 수 있습니다
는 MongoDB를 3.2 이상 버전에서 지원하는 기능을 가입 할 수 있습니다. 당신은 집계 쿼리를 사용하여 조인 사용할 수 있습니다. 당신은 예를 아래에 사용하여 수행 할 수 있습니다
db.users.aggregate([ // Join with user_info table { $lookup:{ from: "userinfo", // other table name localField: "userId", // name of users table field foreignField: "userId", // name of userinfo table field as: "user_info" // alias for userinfo table } }, { $unwind:"$user_info" }, // $unwind used for getting data in object or for one record only // Join with user_role table { $lookup:{ from: "userrole", localField: "userId", foreignField: "userId", as: "user_role" } }, { $unwind:"$user_role" }, // define some conditions here { $match:{ $and:[{"userName" : "admin"}] } }, // define which fields are you want to fetch { $project:{ _id : 1, email : 1, userName : 1, userPhone : "$user_info.phone", role : "$user_role.role", } } ]);
이 같은 결과를 줄 것이다 :
{ "_id" : ObjectId("5684f3c454b1fd6926c324fd"), "email" : "admin@gmail.com", "userName" : "admin", "userPhone" : "0000000000", "role" : "admin" }
이 당신이나 다른 사람을 도움이되기를 바랍니다.
감사
-
==============================
2.당신은 실제로 여러 $ 조회 단계를 체인 수 있습니다. profesor79 공유하는 컬렉션의 이름을 바탕으로, 당신은이 작업을 수행 할 수 있습니다 :
당신은 실제로 여러 $ 조회 단계를 체인 수 있습니다. profesor79 공유하는 컬렉션의 이름을 바탕으로, 당신은이 작업을 수행 할 수 있습니다 :
db.sivaUserInfo.aggregate([ { $lookup: { from: "sivaUserRole", localField: "userId", foreignField: "userId", as: "userRole" } }, { $unwind: "$userRole" }, { $lookup: { from: "sivaUserInfo", localField: "userId", foreignField: "userId", as: "userInfo" } }, { $unwind: "$userInfo" } ])
이것은 다음과 같은 구조를 반환합니다 :
{ "_id" : ObjectId("56d82612b63f1c31cf906003"), "userId" : "AD", "phone" : "0000000000", "userRole" : { "_id" : ObjectId("56d82612b63f1c31cf906003"), "userId" : "AD", "role" : "admin" }, "userInfo" : { "_id" : ObjectId("56d82612b63f1c31cf906003"), "userId" : "AD", "phone" : "0000000000" } }
어쩌면 MongoDB를 관계형 될 운명되지 않았기 때문에이 안티 패턴으로 간주 될 수 있지만, 유용합니다.
-
==============================
3.문서에 따르면, $ 조회는 하나의 외부 수집을 가입 할 수 있습니다.
문서에 따르면, $ 조회는 하나의 외부 수집을 가입 할 수 있습니다.
당신이 할 수있는 것은 제공 예를 관계형 DB 스키마를 기반으로, 하나 명의 컬렉션 사용자 정보 및 userRole을 결합하는 것입니다. 몽고가되는 NoSQL 데이터베이스입니다 -이 문서 관리를위한 다른 접근 방법이 필요합니다.
디스플레이 결합 된 데이터 지난 쿼리에 사용 된 새 임시 모음을 만드는 - userRole와 사용자 정보를 결합하여 2 단계 쿼리, 검색 할 수 있습니다. 지난 쿼리에서 $를 사용하고 나중에 사용하기 위해 병합 된 데이터와 함께 새로운 컬렉션을 만들 수있는 옵션이 있습니다.
db.sivaUser.insert( { "_id" : ObjectId("5684f3c454b1fd6926c324fd"), "email" : "admin@gmail.com", "userId" : "AD", "userName" : "admin" }) //"userinfo" db.sivaUserInfo.insert( { "_id" : ObjectId("56d82612b63f1c31cf906003"), "userId" : "AD", "phone" : "0000000000" }) //"userrole" db.sivaUserRole.insert( { "_id" : ObjectId("56d82612b63f1c31cf906003"), "userId" : "AD", "role" : "admin" })
db.sivaUserInfo.aggregate([ {$lookup: { from: "sivaUserRole", localField: "userId", foreignField: "userId", as: "userRole" } }, { $unwind:"$userRole" }, { $project:{ "_id":1, "userId" : 1, "phone" : 1, "role" :"$userRole.role" } }, { $out:"sivaUserTmp" } ]) db.sivaUserTmp.aggregate([ {$lookup: { from: "sivaUser", localField: "userId", foreignField: "userId", as: "user" } }, { $unwind:"$user" }, { $project:{ "_id":1, "userId" : 1, "phone" : 1, "role" :1, "email" : "$user.email", "userName" : "$user.userName" } } ])
from https://stackoverflow.com/questions/35813854/how-to-join-multiple-collections-with-lookup-in-mongodb by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB를 구별 어디 동일한 쿼리에서? (0) | 2020.02.21 |
---|---|
[MONGODB] MongoDB의의 CONCAT의 INT 및 문자열 (0) | 2020.02.19 |
[MONGODB] MongoDB를 복합 기본 키 (0) | 2020.02.06 |
[MONGODB] $ 슬라이스 연산자를 사용하여 배열의 마지막 요소를 얻을 수 있습니다 (0) | 2020.01.25 |
[MONGODB] MongoDB의 쉘에서 데이터베이스를 작성하지 (0) | 2020.01.18 |