3

最後の点数が 15 から 20 の間のすべての生徒を取得したいと考えています。そのために、mongoose を使用して mongoDB で次のクエリを実行します。

Pupils.find({"marks[-1].value": {'$lt' : 20 }, "marks[-1].value" : { '$gt' : 15 }}, function(err, things){

これは機能していません。見逃したものはありますか?

* アップデート *

私は次のようなものを見つけました:

Pupils.find({ "marks[-1].value": {$gt : 15, $lt : 20}});

しかし、これもうまくいきません。この場合、マーク配列の最後のマークを取得する方法はありますか?

4

3 に答える 3

5

あなたのPupilsコレクションを考えてみましょう:

Pupils 
{
  _id,
  Marks(integer),
  LatestMark(int)
}

上のドキュメントでわかるように、最新のマークを生徒ドキュメントに追加し、ネストされたコレクションに新しいマークを追加するたびに更新することをお勧めします。次に、次のようにクエリを実行できます。

db.Pupils.find({ "LatestMark": {$gt : 15, $lt : 20}});

$whereを使用して最新のマークを照会することもできますが、次の理由で注意してください。

Javascript の実行はネイティブ オペレーターよりも遅くなりますが、非常に柔軟です。

于 2011-04-12T10:17:16.043 に答える
0

私はmongooseを使用していませんが、mongoの埋め込みコレクションは「marks.0.value」のようにアクセスされるため、機能していないと思います。

残念ながら、あなたのシナリオでは、負のインデックスを使用する方法はないと思います。(とにかくキャップ付きコレクションを使用しない限り、Mongo は保存された自然順序を保証しません)

Map/Reduce または group コマンドを使用してこれを達成できる場合があります

http://www.mongodb.org/display/DOCS/MapReduce

于 2011-04-11T22:35:36.137 に答える