2017-02-07 16 views
0

Mongooseを使用してMongoDBデータベースの1,5および8の位置にある文書を取得する必要があります。 コレクション内の位置によってドキュメントを取得することはできますか?もしそうなら、あなたはそれを行う方法を示すことができますか?配列内の位置/インデックスでドキュメントを見つける方法は?

私はこのような何かが必要です。

var indexes = MyModel.getIndexes(); 

var someDocs = MyModel.find({<collectionIndex>: [1, 5, 8]}, function(err, docs) { 

    //do something with the three documents 

}) 

私はインデックスがコレクションで使用されているものを見るために次の操作を実行しようとしたのが、私は取得エラー「getIndexesは機能ではありません」

ありがとうございました。

答えて

0

たとえば、位置5では、コレクションのリテラル5番目の要素を意味しますが、これは最善の方法ではありません。 Mongoコレクションは、通常、要素を挿入した順番で表示されますが、常にそうであるとは限りません。ここの答えを参照し、natural orderの文書を確認してください:https://stackoverflow.com/a/33018164/7531267

場合によっては、照会できる各レコードに固有のidが存在する可能性があります。 あなたが言及した[8 1、5]がidのあると仮定すると、このようなものは、それを行う必要があります:あなたはまた、$orを交換し、クエリを少しクリーンアップするのに約$inを読むことができ

var someDocs = MyModel.find({ $or: [{ id: 1 }, { id: 5 }, { id: 8 }]}}, function(err, cb) { 
    //do something with the three documents 
}) 

。以下

{ 
    _id: ObjectId('...'), 
    name: 'wrq', 
    friends: ['A', 'B', 'C'] 
} 

コードは、ユーザーWRQ "の最初とthrid友人を検索する:

db.users.aggregate(
    [ 
    { 
     $match: { 
     name: 'wrq' 
     } 
    }, 
    { 
     $project:{ 
     friend1: { 
      $arrayElemAt: ["$friends", 0] 
     }, 
     friend3: { 
      $arrayElemAt: ["$friends", 2] 
     } 
     } 
    } 
    ] 
) 
+0

事は、私はランダム3を取得する必要があるということです – Octtavius

+0

ああ、非常に興味深い問題です。おそらく[this](http://stackoverflow.com/questions/14644545/random-document-from-a-collection-in-mongoose)のようなものが役に立ちます。要点は: 'Model.findOne()。skip(random)'ですが、ランダムなレコードを3つ取得するには3つのクエリが必要です。 –

0

は、ユーザーのコレクションにこの文書を持っていると仮定しますMongooseを使ったコレクションからの文書ですから、私がやりたがっているのは、3つの乱数を生成し、その数値をコレクションのインデックスとして使用することです。したがって、私の関数が1,5,8という数字を生成した場合、これらの数値を使用したいと思います。私はランダムなドキュメントを取得するためのmongo関数があることを知っていますが、それはmongooseで行う必要があります。
+0

このコードはmongoシェルでうまくいくので、mongooseでそれを行う方法を見つける必要があるかもしれません。 –

関連する問題