2012-02-19 1 views
3

私はMongooseでnode.jsアプリケーションを構築しており、埋め込みドキュメントのソートに関連する問題があります。ここで私が使用したスキーマです:Mongooseクエリを使用して埋め込みドキュメントの配列を並べ替えるにはどうすればいいですか?

var locationSchema = new Schema({ 
    lat: { type: String, required: true }, 
    lon: { type: String, required: true }, 
    time: { type: Date, required: true }, 
    acc: { type: String } 
}) 

var locationsSchema = new Schema({ 
    userId: { type: ObjectId }, 
    source: { type: ObjectId, required: true }, 
    locations: [ locationSchema ] 
}); 

私は出力に自分の時間属性でソートされた文書userLocationsに埋め込まれた場所にしたいと思います。

function locationsDescendingTimeOrder(loc1, loc2) { 
    return loc2.time.getTime() - loc1.time.getTime() 
} 

LocationsModel.findOne({ userId: theUserId }, function(err, userLocations) { 
    userLocations.locations.sort(locationsDescendingTimeOrder).forEach(function(location) { 
     console.log('location: ' + location.time); 
    } 
}); 

私はマングースが提供するソートAPIについて読みましたが、それはの配列をソートするために使用することができる場合、私は把握できませんでした:私はそうのようにMongoDBからデータを取得した後、私は現在、JavaScriptで並べ替えますもしあれば、それが合理的なアプローチであり、それをこの問題にどのように適用するのかということです。誰も助けてくれますか?あなたはそれを右の方法、ゲオルクをやっている、事前と歓声で

おかげで、 ゲオルク

答えて

4

。あなたの他の選択肢は、最初の場所に埋め込まれたときに場所をソートするか、より伝統的な非埋め込みルート(または最小限の埋め込みルートになるため、IDや配列の配列を埋め込むかもしれませんが、実際に場所は別途)。

+0

ありがとうございました。私はあなたが提案したアプローチを使用して終了しました - 埋め込み時に場所をソートする。私のためにうまく動作します。 – BumbleGee

+0

これも私の問題ですが、埋め込み時に埋め込みドキュメントをどのようにソートできますか? – drinchev

+0

私はそれを理解しました。おそらく、新しい文書を.pushまたは.unshiftで追加すると、正しく配置されます。 – drinchev

関連する問題