2017-11-22 5 views
0

내가 가지고있는이 컬렉션은 내가 아이디어떻게 mongodb에서 집계 할 수 있습니까? "juir" "mobinumber을"

points collection   
{ 
    "userpoint": "2", 
    "purchaseid":"dj04944", 
    "store":"001", 
    "date":ISODate("2017-11-10T08:15:39.736Z") 
    "userid"[ 
    objectID("5a7565ug8945rt67"), 
    objectID("8a35553d3446rt78") 
    ] 
}, 
{ 
    "userpoint": "4", 
    "purchaseid":"5678sd", 
    "store":"004", 
    "date":ISODate("2017-11-11T08:15:39.736Z") 
    "userid"[ 
    objectID("9a85653d3890rt09") 
    ] 
} 

users collection 

{ 
    objectID("5a7565ug8945rt67"), 
    "name":"asdf", 
    "mobinumber":"12345", 

}, 
{ 
    objectID("8a35553d3446rt78"), 
    "name":"qwr", 
    "mobinumber":"11111", 

}, 

{ objectID에 ("9a85653d3890rt09"), "이름"을 기준으로 집계하고 싶어 여기 수집 및 사용자 수집 포인트 : 내가 할 수있는 방법 "9611",

} 

를 집계

db.points.aggregate([ 
    { 
     $lookup: 
     { 
      from: "users", 
      localField: "", 
      foreignField: "", 
      as: "inventory_docs" 
     } 
    } 
]) 

나는 앞으로

+0

당신은 당신이 원하는 것을 설명 할 필요가이 쿼리를 시도 할 수 있습니다 단어로. 필요한 결과는 무엇입니까? 집계에서 사용자 컬렉션의 일부 필드가 필요합니까? –

+0

두 컬렉션을 결합해야합니다. 예. 사용자 컬렉션의 모든 필드가 필요합니다. @AsyaKamsky –

+0

localField "userid"및 foreignField "_id"를 사용하십시오. –

답변

1

를 이동 나를 도와 두 컬렉션을 결합하려는 경우처럼 예상 출력 우는 소리

{ 
    "_id" : ObjectId("5a164fa5400096bfa0b3422c"), 
    "date" : ISODate("2017-11-10T08:15:39.736Z"), 
    "name" : "asdf", 
    "mobile" : "12345" 
} 

db.points.aggregate([ 
{ 
    $match: { 
     store: "001", 
     date: {$lte: ISODate("2017-11-10T08:15:39.736Z"), $gte: ISODate("2017-11-10T08:15:39.736Z")} 
    } 
    }, 
    {$unwind: "$userid"}, 
    { 
    $lookup: { 
     from: "users", 
     localField: "userid", 
     foreignField: "_id", 
     as: "user" 
    } 
    }, 
    { 
    $project: { 
     userpoint: 1, 
     purchaseid: 1, 
     date: 1, 
     user: {$arrayElemAt: ["$user", 0]} 
    } 
    }, 
    {$match: {"user.name": "asdf"}}, 
    { 
    $project: { 
     date: 1, 
     name: "$user.name", 
     mobile: "$user.mobinumber" 
    } 
    } 
]) 
+0

"store": 001, ISODate ("2017-11-10T08 : 15 : 39.736Z") 및 "name": "asdf" –

+0

'store : 001'에는 2 명의 사용자가 있으므로 왜 "store" 'asdf'라는 이름 만 갖고 싶습니까? 당신의 실제 조건은 당신이 당신의 질문에 당신의 기준, 당신이 원하는 것 등을 분명히 기술해야만합니다 .... @itsme –

+0

store : 001은 두 명의 사용자 (다중 사용자 일 수도 있습니다)가 언젠가는 그 특정한 사용자 (이름으로 찾기) –