I have a MongoDB collection with documents in the following format:
{
\"_id\" : ObjectId(\"4e8ae86d08101908e1000001\"),
\"name\" : [\"Name\"],
\"zipcod
I found this solution, to find items with an array field greater than certain length
db.allusers.aggregate([
{$match:{username:{$exists:true}}},
{$project: { count: { $size:"$locations.lat" }}},
{$match:{count:{$gt:20}}}
])
The first $match aggregate uses an argument thats true for all the documents. If blank, i would get
"errmsg" : "exception: The argument to $size must be an Array, but was of type: EOO"
None of the above worked for me. This one did so I'm sharing it:
db.collection.find( {arrayName : {$exists:true}, $where:'this.arrayName.length>1'} )
You can MongoDB aggregation to do the task:
db.collection.aggregate([
{
$addFields: {
arrayLength: {$size: '$array'}
},
},
{
$match: {
arrayLength: {$gt: 1}
},
},
])
Try to do something like this:
db.getCollection('collectionName').find({'ArrayName.1': {$exists: true}})
1 is number, if you want to fetch record greater than 50 then do ArrayName.50 Thanks.
db.accommodations.find({"name":{"$exists":true, "$ne":[], "$not":{"$size":1}}})
MongoDB 3.6 include $expr https://docs.mongodb.com/manual/reference/operator/query/expr/
You can use $expr in order to evaluate an expression inside a $match, or find.
{ $match: {
$expr: {$gt: [{$size: "$yourArrayField"}, 0]}
}
}
or find
collection.find({$expr: {$gte: [{$size: "$yourArrayField"}, 0]}});