2015-06-24 59 views
3

我正在使用sails-mongo的native方法來查詢集合。我需要使用native來訪問一些Mongo地理空間查詢功能。我可以使用Sails原生查詢進行填充嗎?

我想使用風帆populate語法來包含關聯的模型。

有沒有辦法做到這一點?

這裏是我現有的代碼的例子:

Trip.native(function(err, collection) { 
    collection.find(
     { 
     "locationTo": { 
      "$near": { 
      "$maxDistance": 80467.35439432222, 
      "$geometry": { 
       "type": "Point", 
       "coordinates": [-117.133655, 32.720519] 
      } 
      } 
     } 
     } 
    ) 
    .toArray(function(err, trips) { 
     console.log("Trips nearby:", trips); 
    }); 
}); 

這裏是我的參考模型之旅。

var Trip = { 
    attributes: { 
    owner: { 
     model: 'User' 
    }, 
    title: 'string', 
    addressFrom: 'string', 
    locationFrom: 'json', // geoJson 
    dateTimeDepart: 'datetime', 
    dateTimeArrive: 'datetime', 
    dateTimeReturn: 'datetime', 
    addressTo: 'string', 
    locationTo: 'json', // geoJson 
    driver: { 
     model: 'User' 
    }, 
    status: { 
     type: 'string', 
     defaultsTo: 'PENDING' 
    } 
    } 
} 

回答

2

如果您同時分享Trip模型,這將有所幫助。如果你想填充的字段有類型「集合」(而不是「數組」),你應該能夠填充它就好了。

更新:好的,我把你的問題弄錯了。在撥打native後,似乎沒有任何填充方式。就Waterline功能而言,您可以通過native調用確實做得不多。我建議你在獲取locationTo之後運行另一個查詢(水線),或者自己填充字段,因爲你只需要填充其中的兩個(並且來自同一模型)。我無法想象任何能滿足單個查詢的事情。

+0

@KevinBaker:我已經更新了答案。讓我們知道它是否有幫助。 – galactocalypse

2

謝謝,我結束了現在在兩個查詢中。

首先,我通過本機查詢構建一個匹配ID的數組。

var tripIdList = trips.map(function (trip) { 
    return trip._id 
}); 

其次,我使用ID列表進行正常查找查詢。這不是一個單一的查詢,但效果很好。感謝您的幫助

Trip.find(filter) 
    .where({id: tripIdList}) 
    .populate('driver') 
    .exec(function (err, trips) { 
    console.log("Trips:", trips); 
    } 
+0

我有同樣的問題,但我還需要保持原生查詢的排序順序,任何線索? –

相關問題