2016-04-18 6 views
1

はスキーマがあります。クエリ選択とそのインデックスを使用して配列内の要素を選択することはできますか?</p> <pre><code>{model.js} var someSchema = new mongoose.Schema({ a : [Number], b : String, c : [Number], d : Number }); </code></pre> <p>私は<em>検索してみてください()</em>各文書と同じインデックスとbでCから、要素から要素のみを選択します。

私が試したものです:

{get.js} 

var some = require('model'); 
some.find() // find 
    .limit(3) // limit for 3 docs (test part) 
          // NEXT LINE IS NOT WORKING 
    .select('a.0 b c.0 -d') // select {array: a and b, index:0}, b less d 
    .exec(function(err, dataList) { 
     if (err) { 
      console.warn(err); 
      return ; 
     } 
     console.log(data[0].a); // Show in console array a 
     console.log(data[0].b); // String b 
     console.log(data[0].c); // array c 
           // not select d, so d = undefined 
    }); 

コードのこの部分では、私は配列のようなインデックスを選択することができるであろうが、私はこのコードをしようとしたとき、私の配列が選択されているが、内部の無い要素と。

スキーマから配列のインデックスを選択する方法はありますか?あなたが代わりにここ$sliceたい

+0

を "ミックス" することはできません:[1、1、1、1、1、1、1、1、1]'とクエリは、 '.select( 'ランク' です) '' .select( 'rank.0') 'を試してみると、配列は' 'rank ''として返されます:[]' –

答えて

1

:ちょうど最初の要素について

some.find() 
    .limit(3) 
    .select({ 
     "a": { "$slice": 1 }, 
     "b": 1, 
     "c": { "$slice": 1 } 
    }) 
    .exec(function(err,dataList) { 

が必要なのは、返すために、あるいはそうでない場合は、インデックス付き位置によって、その後の数が返すことの数です。だから、2番目のインデックスのために、それは次のようになります。

some.find() 
    .limit(3) 
    .select({ 
     "a": { "$slice": [1,1] }, 
     "b": 1, 
     "c": { "$slice": [1,1] } 
    }) 
    .exec(function(err,dataList) { 

これは.select()ステートメントに供給される投影の「完全なオブジェクト」の形を必要と、あるいは.find()に投影引数として提供します。

また、予測は「完全に」包含リストか「除外」のみであることにも注意してください。あなたは私の配列は ` "ランク" で包含または除外

両方
+0

それは私が意味することです!私は.select( 'rank')のスライス(1)で試しましたが、私にとってはうまくいきませんでした。 '( $ sliceはうまく動作します、マスターに感謝! –

関連する問題

 関連する問題