주어진 다음의 컬렉션 :MongoDB를 - "가입"컬렉션
메시지 수집
{
"_id" : ObjectId("59f76fc3a8e87e411c22d0ac"),
"OriginApp" : "App1",
"MsgGroupId" : "499",
"UserName" : "User1",
"Message" : "Test Message [Group ID: 499]"
}
{
"_id" : ObjectId("59f76fc3a8e87e411c22d0ad"),
"OriginApp" : "App1",
"MsgGroupId" : "499",
"UserName" : "User2",
"Message" : "Test Message [Group ID: 499]"
}
{
"_id" : ObjectId("59f76fc3a8e87e411c22d0af"),
"OriginApp" : "App1",
"MsgGroupId" : "499",
"UserName" : "User3",
"Message" : "Test Message [Group ID: 499]"
}
된 MessageEvent 수집 나는 다음과 같은 투사를 반환하고 싶은
{
"_id" : ObjectId("59f772d1d22ea83b249d19c2"),
"Event" : "Send",
"Msg" : {
"UserName" : "User1",
"Metadata" : {
"OriginApp" : "App1",
"MessageId" : "59f76fc3a8e87e411c22d0ac"
},
},
"TimeStamp" : "2017-10-30T18:20:17Z"
}
{
"_id" : ObjectId("59f772d1d22ea83b249d19c2"),
"Event" : "Open",
"Msg" : {
"UserName" : "User1",
"Metadata" : {
"OriginApp" : "App1",
"MessageId" : "59f76fc3a8e87e411c22d0ac"
},
},
"TimeStamp" : "2017-10-30T18:30:16Z"
}
{
"_id" : ObjectId("59f772d1d22ea83b249d19c2"),
"Event" : "Click",
"Msg" : {
"UserName" : "User1",
"Metadata" : {
"OriginApp" : "App1",
"MessageId" : "59f76fc3a8e87e411c22d0ac"
},
},
"TimeStamp" : "2017-10-30T18:38:57Z"
}
:
{
"MessageId" : "59f76fc3a8e87e411c22d0ac"
"EventId" : "59f772d1d22ea83b249d19c2",
"Event" : "Send",
"UserName" : "User1",
"OriginApp" : "App1",
"TimeStamp" : "2017-10-30T18:20:17Z"
}
{
"MessageId" : "59f76fc3a8e87e411c22d0ac"
"EventId" : "59f772d1d22ea83b249d19c2",
"Event" : "Open",
"UserName" : "User1",
"OriginApp" : "App1",
"TimeStamp" : "2017-10-30T18:30:16Z"
}
{
"MessageId" : "59f76fc3a8e87e411c22d0ac"
"EventId" : "59f772d1d22ea83b249d19c2",
"Event" : "Click",
"UserName" : "User1",
"OriginApp" : "App1",
"TimeStamp" : "2017-10-30T18:38:57Z"
}
MsgEvent.Msg.Metadata.MessageId가 문자열이고 Message._id가 ObjectId이므로 문제가 즉시 발생했습니다. 단순한 json으로 외부 응용 프로그램에서 서비스로 반환되기 때문에 MsgEvent.Msg.Metadata.MessageId를 ObjectId로 만들 수 없습니다.
고유 한 연산자 또는 일부 유형의 집계를 사용하여 원하는 결과를 얻는 방법이 있습니까?
- UPDATE -
MongoDB를이 (원래의 질문의 일부) 쿼리의 데이터 변환, I는 추가 속성을 제공함으로써 지금 문제가 해결이 허용되지 않습니다 감안할 때
메시지 수집
{
"_id" : ObjectId("59f76fc3a8e87e411c22d0ac"),
"GuidString" : "d273a5dd-7291-432f-a9ab-8bad7343a1a4",
"OriginApp" : "App1",
"MsgGroupId" : "499",
"UserName" : "User1",
"Message" : "Test Message [Group ID: 499]"
}
된 MessageEvent 수집
: 문자열로 GUID를{
"_id" : ObjectId("59f772d1d22ea83b249d19c2"),
"Event" : "Send",
"Msg" : {
"UserName" : "User1",
"Metadata" : {
"OriginApp" : "App1",
"MessageId" : "59f76fc3a8e87e411c22d0ac",
GuidString" : "d273a5dd-7291-432f-a9ab-8bad7343a1a4"
},
},
"TimeStamp" : "2017-10-30T18:20:17Z"
}
등 ...
다음 집계가 예상 결과를 반환합니다 여러 컬렉션을 결합하거나 그룹 해제, 데이터, 예를 들면 그룹의 재편을 할
db.MessageEvent.aggregate(
[
{ $match : { "Msg.Metadata.GuidString" : "d273a5dd-7291-432f-a9ab-8bad7343a1a4" } },
{ $unwind: "$Msg" },
{
$lookup: {
"from": "GuidString",
"localField": "ChannelSenderId",
"foreignField": "GuidString",
"as": "messages"
}
}
]);