MongoDB - Query on the last element of an array? MongoDB - Query on the last element of an array? mongoose mongoose

MongoDB - Query on the last element of an array?


In 3.2 this is possible. First project so that myField contains only the last element, and then match on myField.

db.collection.aggregate([   { $project: { id: 1, myField: { $slice: [ "$myField", -1 ] } } },   { $match: { myField: "myValue" } }]);


You can use $expr ( 3.6 mongo version operator ) to use aggregation functions in regular query.

Compare query operators vs aggregation comparison operators.

For scalar arrays

db.col.find({$expr: {$gt: [{$arrayElemAt: ["$array", -1]}, value]}})

For embedded arrays - Use $arrayElemAt expression with dot notation to project last element.

db.col.find({$expr: {$gt: [{"$arrayElemAt": ["$array.field", -1]}, value]}})

Spring @Query code

@Query("{$expr:{$gt:[{$arrayElemAt:[\"$array\", -1]}, ?0]}}")ReturnType MethodName(ArgType arg);


use $slice.

db.collection.find( {}, { array_field: { $slice: -1 } } )

Editing:You can make use of { <field>: { $elemMatch: { <query1>, <query2>, ... } } } to find a match.

But it won't give exactly what you are looking for. I don't think that is possible in mongoDB yet.