2016-11-01 12 views
0

私はDBのこれらのエンティティでそれぞれ大きな配列を持つ多くのエンティティを持っています。私は配列の最初と最後の要素を取得したい(私はすべての配列を取得する場合はあまりにも多くのデータがあります)。どうしたらいいですか? 私はこの試みた:Mongo配列の特定のインデックスを取得します。

db.my_collection.findOne({my_query:'is_awesome'}, {'big_array.0':1}) 

を、それは動作しません... 感謝です!

答えて

1

findOneの代わりに$matchを実行すると、集約を使用できます。あなたが位置1にある項目を$sliceと-1できるようにMongoDB 3.2

は、$sliceは、凝集がある:

MongoDBの< 3.2
db.my_collection.aggregate([{ 
    $match: { my_query: 'is_awesome' } 
}, { 
    $project: { 
     my_query: 1, 
     firstElement: { $slice: ["$big_array", 1] }, 
     lastElement: { $slice: ["$big_array", -1] } 
    } 
}]) 

使用できるように、$sliceは、凝集において使用されカント$unwind$group、MongoDBの3.0で動作している次

db.my_collection.aggregate([{ 
    $match: { my_query: 'is_awesome' } 
}, { 
    $unwind: "$big_array" 
}, { 
    $group: { 
     _id: "$_id", 
     my_query: { $first: "$my_query" }, 
     firstElement: { $first: "$big_array" }, 
     lastElement: { $last: "$big_array" } 
    } 
}]) 
+0

感謝です!少なくともMongoDBバージョン3.1でのみ利用可能ですか? – BNilsou

+0

mongodbから動作するはずです。2.4 –

+0

'' 'mongo --version'''私に3.0.8を与えてください。それから私はあなたのトリックで、次のエラーを持っている: は '' 'アサート:コマンドが失敗しました:{ "ERRMSGを": "例外:無効な演算子 '$スライス'"、 "コード":15999、 "OK":0 }:集合体は エラーを失敗:コマンドが失敗しました:{ "ERRMSG": "例外:無効な演算子 '$スライス'"、 "コード":15999、 "OK":0 を}:集計failed''' はなかったです私は何かが欠けている? – BNilsou

関連する問題