[MONGODB] 어떻게 같은 성명을 채우고 집계를 사용 하는가?
MONGODB어떻게 같은 성명을 채우고 집계를 사용 하는가?
이것은 나의 약속 모음입니다 :
{ _id: ObjectId("518ee0bc9be1909012000002"), date: ISODate("2013-05-13T22:00:00Z"), patient:ObjectId("518ee0bc9be1909012000002") }
{ _id: ObjectId("518ee0bc9be1909012000002"), date: ISODate("2013-05-13T22:00:00Z"), patient:ObjectId("518ee0bc9be1909012000002") }
{ _id: ObjectId("518ee0bc9be1909012000002"), date: ISODate("2013-05-13T22:00:00Z"), patient:ObjectId("518ee0bc9be1909012000002") }
나는 다음과 같은 결과를 얻을 수 집계 사용
{date: ISODate("2013-05-13T22:00:00Z"),
patients:[ObjectId("518ee0bc9be1909012000002"),ObjectId("518ee0bc9be1909012000002"),ObjectId("518ee0bc9be1909012000002")] }
이 같은 :
Appointments.aggregate([
{$group: {_id: '$date', patients: {$push: '$patient'}}},
{$project: {date: '$_id', patients: 1, _id: 0}}
], ...)
나는 환자 문서를 채울 수있는 방법 나는이 시도했지만 작동 ... Appointments.find ({}). 채우기 ( "환자")를하지 않습니다. 골재 ....
즉, 내가 같은 문에 채우고 집계를 사용할 수 있습니다
어떤 도움 바랍니다
해결법
-
==============================
1.몽구스의 최신 버전 (몽구스> = 3.6)으로, 당신은하지만 두 번째 쿼리를 필요로하고, 다른 채우기를 사용 할 수 있습니다. 당신 집계 한 후,이 작업을 수행 :
몽구스의 최신 버전 (몽구스> = 3.6)으로, 당신은하지만 두 번째 쿼리를 필요로하고, 다른 채우기를 사용 할 수 있습니다. 당신 집계 한 후,이 작업을 수행 :
Patients.populate(result, {path: "patient"}, callback);
몽구스 API와 몽구스의 문서에서 더 많은 참조하십시오.
-
==============================
2.당신은 채울 유사하다 $ 조회를 사용할 수 있습니다.
당신은 채울 유사하다 $ 조회를 사용할 수 있습니다.
관련이없는 예제에서는 레코드에 대한 쿼리 및 이러한 기록의 하위 속성으로 외국 모델을 채우는 $ 조회에 $ 일치를 사용합니다 :
Invite.aggregate( { $match: {interview: req.params.interview}}, { $lookup: {from: 'users', localField: 'email', foreignField: 'email', as: 'user'} } ).exec( function (err, invites) { if (err) { next(err); } res.json(invites); } );
-
==============================
3.A는 $ 조회에 가입 수행
A는 $ 조회에 가입 수행
모음의 순서는 다음과 같은 문서가 포함되어 있습니다 :
{ "_id" : 1, "item" : "abc", "price" : 12, "quantity" : 2 } { "_id" : 2, "item" : "jkl", "price" : 20, "quantity" : 1 } { "_id" : 3 }
또 다른 수집 목록은 다음과 같은 문서가 포함되어 있습니다 :
{ "_id" : 1, "sku" : "abc", description: "product 1", "instock" : 120 } { "_id" : 2, "sku" : "def", description: "product 2", "instock" : 80 } { "_id" : 3, "sku" : "ijk", description: "product 3", "instock" : 60 } { "_id" : 4, "sku" : "jkl", description: "product 4", "instock" : 70 } { "_id" : 5, "sku": null, description: "Incomplete" } { "_id" : 6 }
주문 수집에 대한 다음 집계 작업은 주문 수집 및 재고 컬렉션에서 SKU 필드에서 필드 항목을 사용하여 인벤토리 수집에서 문서와 주문에서 문서를 조인
db.orders.aggregate([ { $lookup: { from: "inventory", localField: "item", foreignField: "sku", as: "inventory_docs" } } ])
동작은 다음과 같은 문서를 반환합니다 :
{ "_id" : 1, "item" : "abc", "price" : 12, "quantity" : 2, "inventory_docs" : [ { "_id" : 1, "sku" : "abc", description: "product 1", "instock" : 120 } ] } { "_id" : 2, "item" : "jkl", "price" : 20, "quantity" : 1, "inventory_docs" : [ { "_id" : 4, "sku" : "jkl", "description" : "product 4", "instock" : 70 } ] } { "_id" : 3, "inventory_docs" : [ { "_id" : 5, "sku" : null, "description" : "Incomplete" }, { "_id" : 6 } ] }
참조 $ 조회
-
==============================
4.이 같은 한 쿼리에서 그것을 할 수 있습니다 :
이 같은 한 쿼리에서 그것을 할 수 있습니다 :
Appointments.aggregate([{ $group: { _id: '$date', patients: { $push: '$patient' } } }, { $project: { date: '$_id', patients: 1, _id: 0 } }, { $lookup: { from: "patients", localField: "patient", foreignField: "_id", as: "patient_doc" } } ])
기본적으로 채울 후드 $ 조회를 사용합니다. 이 경우에는 두 번째 쿼리에 대한 필요가 없습니다. 자세한 내용은 확인 MongoDB를 집계 조회
-
==============================
5.짧은 답변: 당신은 할 수 없습니다.
짧은 답변: 당신은 할 수 없습니다.
긴 대답 : 집계 프레임 워크에서 반환 된 필드는 사용자에 의해 구축하고있는 거를 수있는 "이름 바꾸기"문서 속성.
이것이 의미하는 것은 몽구스 당신의 참조 문서는 최종 결과에 사용할 수 있음을 식별 할 수 있다는 것입니다.
이 같은 상황에서 할 수있는 가장 좋은 방법은 쿼리가 리턴 한 후 원하는 필드를 채울 수 있습니다. 네, 두 DB 호출을 초래하지만, MongoDB를 우리가 수행 할 수거야.
다소 같은 :
Appointments.aggregate([ ... ], function( e, result ) { if ( e ) return; // You would probably have to do some loop here, as probably 'result' is array Patients.findOneById( result.patient, function( e, patient ) { if ( e ) return; result.patient = patient; }); });
-
==============================
6.
domain.Farm.aggregate({ $match: { "_id": mongoose.Types.ObjectId(farmId) } }, { $unwind: "$SelfAssessment" }, { $match: { "SelfAssessment.questionCategoryID": QuesCategoryId, "SelfAssessment.questionID": quesId } },function(err, docs) { var options = { path: 'SelfAssessment.actions', model: 'FarmAction' }; domain.Farm.populate(docs, options, function (err, projects) { callback(err,projects); }); });
나는 행동 모델 채우기있어 결과
{ "error": false, "object": [ { "_id": "57750cf6197f0b5137d259a0", "createdAt": "2016-06-30T12:13:42.299Z", "updatedAt": "2016-06-30T12:13:42.299Z", "farmName": "abb", "userId": "57750ce2197f0b5137d2599e", "SelfAssessment": { "questionName": "Aquatic biodiversity", "questionID": "3kGTBsESPeYQoA8ae2Ocoy", "questionCategoryID": "5aBe7kuYWIEoyqWCWcAEe0", "question": "Waterways protected from nutrient runoff and stock access through fencing, buffer strips and off stream watering points", "questionImage": "http://images.contentful.com/vkfoa0gk73be/4pGLv16BziYYSe2ageCK04/6a04041ab3344ec18fb2ecaba3bb26d5/thumb1_home.png", "_id": "57750cf6197f0b5137d259a1", "actions": [ { "_id": "577512c6af3a87543932e675", "createdAt": "2016-06-30T12:38:30.314Z", "updatedAt": "2016-06-30T12:38:30.314Z", "__v": 0, "Evidence": [], "setReminder": "", "description": "sdsdsd", "priority": "High", "created": "2016-06-30T12:38:30.312Z", "actionTitle": "sdsd" } ], "answer": "Relevant" }, "locations": [] } ], "message": "", "extendedMessage": "", "timeStamp": 1467351827979 }
-
==============================
7.당신은 할 일 명 성명에서, 두를해야한다.
당신은 할 일 명 성명에서, 두를해야한다.
await를 시나리오 비동기에서 채우기까지 확인 await를합니다.
CONST 약속 AWAIT Appointments.aggregate = ([...]); AWAIT Patients.populate (약속 {경로 "환자"}); 약속을 반환;
또는 (제한하려는 경우)
AWAIT Patients.populate (약속 {경로 "환자"선택 {_id : 1, 전체 이름 : 1}});
from https://stackoverflow.com/questions/16680015/how-to-use-populate-and-aggregate-in-same-statement by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 문자열이 MongoDB를 OBJECTID 경우 내가 확인할 수 있습니까? (0) | 2019.12.14 |
---|---|
[MONGODB] MongoDB의에서 ISODate 포맷 (0) | 2019.12.13 |
[MONGODB] mongod를 사용하여 UTC에 날짜를 저장할 때 어떻게 시간대의 문제를 다루는? (0) | 2019.12.13 |
[MONGODB] MongoDB의 중첩 배열 쿼리 (0) | 2019.12.13 |
[MONGODB] 어떻게 MongoDB를 내부 목록에 요소를 삽입? (0) | 2019.12.13 |