2016-11-13 14 views
0

mongodbコレクションの最初の1〜10個のドキュメントを取得し、それらのアイテムをリストに表示するアンドロイドアプリを作成しようとしています。 mongodbコレクションで11〜20件の文書を取りたいと思っています。mongodbのnからn個のアイテムを取得する方法

def get_all_tips(from_item, max_items): 
    db = client.MongoTip 
    tips_list = db.tips.find().sort([['_id', -1]]).limit(max_items).skip(from_item) 
    if tips_list.count() > 0: 
     from bson import json_util 
     return json_util.dumps(tips_list, default=json_util.default), response_ok 
    else: 
     return "Please move along nothing to see here", response_invalid 

    pass 

しかし、上記のコードは、私が意図したように動作しませんが、むしろそれはmax_items

例にfrom_itemから返します呼び出すget_all_tips(3,4)

それが返されます。

文献3、文献4、文献5、文献6

私が期待している:あなたのコードで

文献3、文献4

+0

はあなたが正しくそれをやっている、あなたは(3)max_itemsで4 db.tips.find()。リミット(4).SKIPを送信していることを確認しています –

答えて

0

を使用すると、2つのパラメータを指定しています。

  1. from_item:
  2. max_items戻す文書の開始インデックスで:

を返すようにアイテムの数をしたがってget_all_tips(3,4)を呼び出すと、文書3から出発して4つのドキュメントが返されこれはまさに起きていることです。

案の修正:

  1. あなたはそれがあなたの場合は3
  2. から始まる二つの文書の最大値を返す意味し、代わりに、文書3と4つのコールget_all_tips(3,2)を返すようにしたい場合「むしろ、あなたの関数では、開始と終了のインデックスを指定したいD、私は次の変更をお勧めします:

    def get_all_tips(from_item, to_item): 
        if to_item < from_item: 
         return "to_item must be greater than from item", bad_request 
        db = client.MongoTip 
        tips_list = db.tips.find().sort([['_id', -1]]).limit(to_item - from_item).skip(from_item) 
    

言われていることを、私は、LiをいただきたいですMongoDbのドキュメントでは、大きなコレクションのページネーションのスキップの使用を推奨していないことを指摘しています。 MongoDb 3.2 cursor.skip

関連する問題