반응형
$209 달러 몽고드의 $프로젝트
$lookup을 사용하여 두 모델을 "가입"하는 쿼리가 있습니다. 그 후 $project를 사용하여 필요한 필드를 선택하지만, $project는 객체 배열을 가져옵니다.user_detail
)에 필요한 데이터가 더 많이 포함되어 있습니다.두 개의 필드만 원합니다(scheduleStart
그리고.scheduleEnd
) 내 결과의.
내 질문:
User.aggregate([{
$match: {
storeKey: req.body.store,
}
},
{
$group: {
_id: {
id: "$_id",
name: "$name",
cpf: "$cpf",
phone: "$phone",
email: "$email",
birthday: "$birthday",
lastName: "$lastname"
},
totalServices: {
$sum: "$services"
},
}
},
{
$lookup: {
from: "schedules",
localField: "_id.phone",
foreignField: "customer.phone",
as: "user_detail"
}
},
{
$project: {
_id: 1,
name: 1,
name: 1,
cpf: 1,
phone: 1,
email: 1,
birthday: 1,
totalServices: 1,
totalValue: { $sum : "$user_detail.value" },
count: {
$sum: 1
},
user_detail: 1
}
},
쿼리 결과:
count: 1
totalServices: 0
totalValue: 73
user_detail: Array(2)
0:
...
paymentMethod: 0
paymentValue: "0"
scheduleDate: "2018-10-02"
scheduleEnd: "2018-10-02 08:40"
scheduleStart: "2018-10-02 08:20"
status: 3
store: "5b16cceb56a44e2f6cd0324b"
updated: "2018-11-27T13:30:21.116Z"
1:
...
paymentMethod: 0
paymentValue: "0"
scheduleDate: "2018-11-27"
scheduleEnd: "2018-11-27 00:13"
scheduleStart: "2018-11-27 00:03"
status: 2
store: "5b16cceb56a44e2f6cd0324b"
updated: "2018-11-27T19:33:39.498Z"
_id:
birthday: "1992-03-06"
email: "csantosgrossi@gmail.com"
id: "5bfed8bd70de7a383855f09e"
name: "Chris Santos G"
phone: "11969109995"
...
필요한 결과:
count: 1
totalServices: 0
totalValue: 73
user_detail: Array(2)
0:
scheduleEnd: "2018-10-02 08:40"
scheduleStart: "2018-10-02 08:20"
1:
scheduleEnd: "2018-11-27 00:13"
scheduleStart: "2018-11-27 00:03"
_id:
birthday: "1992-03-06"
email: "csantosgrossi@gmail.com"
id: "5bfed8bd70de7a383855f09e"
name: "Chris Santos G"
phone: "11969109995"
...
제 질문을 어떻게 해야 하나요?
파이프라인 내부의 필드에 3.6 구문을 사용할 수 있습니다.
User.aggregate([
{ "$lookup": {
"from": "schedules",
"let": { "id": "$_id.phone" },
"pipeline": [
{ "$match": { "$expr": { "$eq": ["$customer.phone", "$$id"] }}},
{ "$project": { "scheduleStart": 1, "scheduleEnd": 1 }}
],
"as": "user_detail"
}}
])
mongo version > 3.6 버전의 경우 이 쿼리는 다음과 같이 사용할 수 있습니다.
User.aggregate([{
$match: {
storeKey: req.body.store,
}
},
{
$group: {
_id: {
id: "$_id",
name: "$name",
cpf: "$cpf",
phone: "$phone",
email: "$email",
birthday: "$birthday",
lastName: "$lastname"
},
totalServices: {
$sum: "$services"
},
}
},
{
$lookup: {
from: "schedules",
localField: "_id.phone",
foreignField: "customer.phone",
as: "user_detail"
}
},
{
$project: {
_id: 1,
name: 1,
name: 1,
cpf: 1,
phone: 1,
email: 1,
birthday: 1,
totalServices: 1,
totalValue: { $sum : "$user_detail.value" },
count: {
$sum: 1
},
user_detail: {
scheduleEnd: 1,
scheduleStart: 1,
}
}
},
언급URL : https://stackoverflow.com/questions/53710203/project-in-lookup-mongodb
반응형
'source' 카테고리의 다른 글
C NULL이 C++11 Nullptr과 같습니까? (0) | 2023.06.23 |
---|---|
열 값을 기준으로 참/거짓을 선택하는 방법은 무엇입니까? (0) | 2023.06.23 |
C에서 음의 숫자를 이동합니다. (0) | 2023.06.23 |
Android 응용 프로그램에서 활동 간에 데이터를 전달하려면 어떻게 해야 합니까? (0) | 2023.06.18 |
예외 처리 블록에서 pl/sql 예외를 다시 발생시키는 방법은 무엇입니까? (0) | 2023.06.18 |