1
我試圖形成蒙戈分貝以下文檔的查詢:MongoDB的:在使用同一查詢結果從查詢同一文檔
myMetaDataDoc document
{
_id: <objectId>,
tour:
{
tourId: "TOURID1",
stops: [{
locationId: "LOC1",
stopId: "STOPID1",
...
],[
locationId: "LOC2",
stopId: "STOPID2",
]}
}
schedule:{
stopSchedules: [{
stopId: "STOPID1"
...
},{
stopId: "STOPID2"
...
}]
}
}
基本上,我想所有在各自的調度信息站一個位置。我需要一個查詢,以實現以下幾點:
- 查詢所有停止與位置(例如LOC1)
- 查詢從1
- 回報有stops.stopId所有stopSchedules停止+時間表
我試過的是使用聚合,但不能得到stops.stopId用於相同的查詢。這是我的嘗試:
db.myMetaDataDoc.aggregate([
{$match : {'tour.stops.locationId':'LOC1'}}, // all tour stops with locationId as LOC1
{$unwind : '$tour.stops'}, // break all stops
{$match : {'tour.stops.locationId':'LOC1'} }, // all tour with only stops with locationId as LOC1
{$unwind : '$schedule.stopSchedules'}, // break all stopschedules
{$match : {'schedule.stopSchedules.stopsId' : {$in :<stopId array>}} } // missing array of stopId
])
除去最後$比賽,我收到一個「tour.stops」的所有行和單「schedules.stopSchedules」。
{ "_id" : ObjectId("xx1"), "myMetaDataDoc" : {"tour" : { "tourId" : "TOURID1", "stops" : { "locationId" : "LOC1", "stopId" : "STOPID1"} } , "schedule" : { "stopSchedules" : { "stopId" : "STOPID1", ...}}}}
{ "_id" : ObjectId("xx2"), "myMetaDataDoc" : {"tour" : { "tourId" : "TOURID1", "stops" : { "locationId" : "LOC1", "stopId" : "STOPID1"} } , "schedule" : { "stopSchedules" : { "stopId" : "STOPID2", ...}}}}
從這組行我只需要那些stops.stopId等於schedules.stopSchedules.stopId的。看來聚合不喜歡$在哪裏。我應該使用mapreduce()來代替嗎?或服務器端腳本?
欣賞所有的建議。