2016-12-09 5 views
3

モンゴで集約フレームワークを使用して、

どのように私は同じ結果を得ることができますよう内モンゴ3.2操作$ arrayElemAtと? Mongoの3.2

コレクション

{ "_id" : 1, "name" : "dave123", favorites: [ "chocolate", "cake", "butter", "apples" ] } 

クエリは

db.users.aggregate([ 
    { 
    $project: 
     { 
     name: 1, 
     first: { $arrayElemAt: [ "$favorites", 0 ] }, 
     last: { $arrayElemAt: [ "$favorites", -1 ] } 
     } 
    } 
]) 

それは正常に動作します

しかし、私はMongo 3.0を使用するように強制されていますので、私はこの演算子を使用することができません。私は何をしたいのか理想的です

何かの方法で配列の要素にアクセスする方法はありますか? ..

モンゴ3.0

コレクション

{ "_id" : 1, "name" : "dave123", favorites: [ "chocolate", "cake", "butter", "apples" ] } 

クエリ

db.users.aggregate([ 
    { 
    $project: 
     { 
     name: 1, 
     first: { "$favorites.0" }, 
     last: { "$favorites.1" } 
     } 
    } 
]) 

私は試してもうまくいかず、空の配列を返します。

しかし、彼らはプロパティではなく、インデックスされているとき、値

すべてのヘルプを取得することができ、本当にいただければ幸いです。

おかげ

答えて

4

あなたは$unwind$groupに必要と次のように$first$last演算子を使用します:$unwindは高価

var first = db.collection.find({}, {"favorites": { $slice: 1}}) 
var last = db.collection.find({}, {"favorites": { $slice: -1}}) 
ある場合

db.collection.aggregate([ 
    { "$unwind": "$favorites" }, 
    { "$group": { 
     "_id": "$_id", 
     "first": { "$first": "$favorites" }, 
     "last": { "$last": "$favorites" } 
    }} 
]) 

または2つの異なるクエリ