[MONGODB] MongoDB를가 ObjectId가에 문자열에서 _id 필드에 가입
MONGODBMongoDB를가 ObjectId가에 문자열에서 _id 필드에 가입
나는 두 개의 컬렉션을 가지고
_id (사용자 컬렉션에서) - 내가 (역할 컬렉션) 사용자 ID를 실시하고이를 근거로이 모음에 가입하고 싶습니다.
나는 쿼리 아래 시도 :
db.role.aggregate(
{
$lookup:
{
from: 'user',
localField: 'userId',
foreignField: '_id',
as: 'output'
}
}
);
이것은 내가 ObjectId가 같은 사용자 ID 저장 나를 오랫동안 같은 결과를 예상 제공합니다. 내 userId를 문자열 인 경우에는 결과가 없습니다. 추신 : 나는 시도
과
. 그러나 경기에 행운이 / A ObjectId가 문자열 필드를 기반으로하지 조인.
어떤 도움을 이해할 수있을 것이다.
해결법
-
==============================
1.이 MongoDB를 3.4로 할 수 없습니다. 이 기능은 이미 요구되었지만, 아직 구현되지 않았습니다. 여기에 해당하는 티켓은 다음과 같습니다 :
이 MongoDB를 3.4로 할 수 없습니다. 이 기능은 이미 요구되었지만, 아직 구현되지 않았습니다. 여기에 해당하는 티켓은 다음과 같습니다 :
지금 당신은 ObjectId가 같은 사용자 ID 저장해야합니다
편집하다
이전 티켓은 MongoDB를 4.0에서 수정되었습니다. 이제 folowing 쿼리이를 달성 할 수 있습니다 :
db.user.aggregate([ { "$project": { "_id": { "$toString": "$_id" } } }, { "$lookup": { "from": "role", "localField": "_id", "foreignField": "userId", "as": "role" } } ])
결과:
[ { "_id": "584aac38686860d502929b8b", "role": [ { "_id": ObjectId("584aaca6686860d502929b8d"), "role": "Admin", "userId": "584aac38686860d502929b8b" } ] } ]
온라인으로 시도 : mongoplayground.net/p/JoLPVIb1OLS를
-
==============================
2.당신은 ObjectId가에 문자열 ID를 변환 MongoDB를 4.0 $ toObjectId 집계를 사용할 수 있습니다
당신은 ObjectId가에 문자열 ID를 변환 MongoDB를 4.0 $ toObjectId 집계를 사용할 수 있습니다
db.role.aggregate([ { "$lookup": { "from": "user", "let": { "userId": "$_id" }, "pipeline": [ { "$addFields": { "userId": { "$toObjectId": "$userId" }}}, { "$match": { "$expr": { "$eq": [ "$userId", "$$userId" ] } } } ], "as": "output" }} ])
또는 당신은 String으로 ObjectId가 변환 MongoDB를 4.0 $의 toString 집계를 사용할 수 있습니다
db.role.aggregate([ { "$addFields": { "userId": { "$toString": "$_id" }}}, { "$lookup": { "from": "user", "localField": "userId", "foreignField": "userId", "as": "output" }} ])
-
==============================
3.나는 이전의 대답은 '$ toObjectId'경우에 오류가 있다고 생각. 송출 문은 함수 집계가 호출되는 DB 수집 (즉 '역할')에 아닌 컬렉션 "에서"(즉 '사용자')에 의해 지적에 적용됩니다.
나는 이전의 대답은 '$ toObjectId'경우에 오류가 있다고 생각. 송출 문은 함수 집계가 호출되는 DB 수집 (즉 '역할')에 아닌 컬렉션 "에서"(즉 '사용자')에 의해 지적에 적용됩니다.
db.role.aggregate([ { "$lookup": { "let": { "userObjId": { "$toObjectId": "$userId" } }, "from": "user", "pipeline": [ { "$match": { "$expr": { "$eq": [ "$_id", "$$userObjId" ] } } } ], "as": "userDetails" }} ])
또는
db.role.aggregate([ { "$project": { "userObjId": { "$toObjectId": "$userId" } } }, { "$lookup": { "localField": "userObjId", "from": "user", "foreignField": "$_id", "as": "userDetails" }} ])
과
db.user.aggregate([ { "$project": { "userStrId": { "$toString": "$_id" }}}, { "$lookup": { "localField": "userStrId", "from": "role", "foreignField": "userId", "as": "roleDetails" }} ])
from https://stackoverflow.com/questions/41093647/mongodb-join-on-id-field-from-string-to-objectid by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] NodeJS와 MongoDB를 사용하여 FindAndModify () 필요 삭제 또는 업데이트 (0) | 2019.12.19 |
---|---|
[MONGODB] MongoDB를 가져올 수 없습니다 (0) | 2019.12.19 |
[MONGODB] MongoDB의 단일 문서 크기 제한 16메가바이트입니다 (0) | 2019.12.19 |
[MONGODB] 그 배열 필드 주어진 배열의 적어도 N 개의 요소를 포함하는 문서를 찾을 (0) | 2019.12.19 |
[MONGODB] 변환 ISO 날짜에 타임 스탬프에 몽고 쿼리 (0) | 2019.12.19 |