2016-07-12 5 views
1

私はAndroidアプリでRealm DBを使用しています。最新のタイムスタンプを持つアイテムを1つだけ取得したいとします。私は何をすべきか分からないので達成できませんでした。しかし、これは私はあなたがMongoDBのために説明するように、あなたがまったく同じ実装を得ることができるとは思わない私はアイテムを1つフェッチするレルムDBからアイテムが最も新しいタイムスタンプのアイテム

TopicModel topicModel = realm.where(TopicModel.class).equalTo("rootMessageId", getRootMessageId()).findFirst(); 
      List<MessageModel> messageModel = realm.where(MessageModel.class) 
        .equalTo("theMainTopidId", topicModel.getRadomUdid()) 
        .findAllSorted("updatedTime", Sort.DESCENDING); 
      Log.e(TAG, "Recent Message: " + messageModel.get(messageModel.size() - 1).getUpdatedTime()); 
+0

何が問題なのですか? –

+0

私はそれが動作していないとは言わなかった。私が言っていることは、最初にフェッチするのではなく、最後のアイテムを取得するのではなく、最新のアイテムでただ1つのアイテムをフェッチする方法があるかどうかです。例:mongodbでは、この 'db.collection.find()。limit(1).sort({$ natural:-1})。pretty()'を実行することができます。アンドロイドであなたは@TimCastelijnsを掘り出す? –

答えて

4

をやっているものです。結果の並べ替えは、クエリの最後または後に行うことです。

たとえば、findAllを呼び出した後に取得されるRealmResultsは、という非常にメモリ消費量が少ないのリストです。クエリから得られた結果はコピーされたオブジェクトではなく、単に参照に過ぎません。 RealmResultsのクラスの説明も参照してください。

このクラスには、特定のレルムのRealmQueryのすべての一致が保持されます。オブジェクトはレルムからRealmResultsリストにコピーされませんが、代わりにRealmResultから参照されます。これにより、メモリが節約され、速度が向上します。

だから、本当に問題ではありません。最新のメッセージを見つけたい場合は、この1ライナーを代わりに使用できます。

MessageModel mm = realm.where(MessageModel.class) 
         .equalTo("theMainTopidId", topicModel.getRadomUdid()) 
         .findAllSorted("updatedTime", Sort.DESCENDING) 
         .where() 
         .findFirst(); 
関連する問題