2016-09-17 6 views
0

mongodbコレクションの位置を使用してドキュメントを取得する必要があります。私はコレクション内の文書の位置を正確に知っていますが、コレクションからそれらの文書を取り出す方法を理解できませんでした。これを達成する方法はありますか?mongodbコレクション内の位置での問い合わせ

db.daily.find({'_id': {'$in': 0,5,8}}) 

これは私が試したものですが、_idは1,2,3として挿入されていない...しかし、それはいくつかのランダムNUM例:あり:57d8fd62f2a9d913ba0d006dを。前もって感謝します。

+2

位置、オーダーはどういう意味ですか?ご注文の場合、何のIDで注文しますか? – abhinsit

+0

あなたがここで何を求めているのかは不明です。期待される結果のサンプル文書を質問に追加することを検討してください。 – styvane

答えて

1

あなたは自然順序リンクが指摘するように、文書の順序が(an exception for capped collectionsで)文書が挿入された順序と一致する必要はありませんnatural order

db.collection.find().skip(10).limit(1) // get 10th document in natural order 

に位置に基づいて照会するskiplimitを使用することができます。あなたの文書のための_idフィールドとしてデフォルトObjectIdを使用している場合、あなたはまた、使用して検討すること(のObjectIdのタイムスタンプの解像度まで)コレクション内の挿入

db.collection.find().sort([("_id",1)]).skip(10).limit(1) // get 10th document in inserted order 

に基づいた順序に_idで並べ替えることができますあなた自身の_idを指定するか、またはあなたが定義した位置に基づいて照会するためにソート可能なフィールドを追加します。

+0

いいえ、ありがとう、私は複数の位置を持っていると考えて、1つのクエリで複数のドキュメントを取得する方法はありますか? –

+0

私は範囲(0、2)でこれを試してみます: horolist.append(db.daily.find()。sort({"_ id":1})。skip(i).limit(1)) 'TypeError:方向が指定されていない場合、key_or_listはリストのインスタンスでなければならない 'という例外があります。 –

+0

連続している場合は、' limit(N) 'を使ってN行を取得できます。それ以外の場合は、位置フィールドを追加し、フィールドに '$ in'またはマルチレンジクエリを使用することを検討してください。 –

関連する問題