I have a MongoDB collection with documents in the following format:
{
"_id" : ObjectId("4e8ae86d08101908e1000001"),
"name" : ["Name"],
"zipcode" : ["2223"]
}
{
"_id" : ObjectId("4e8ae86d08101908e1000002"),
"name" : ["Another ", "Name"],
"zipcode" : ["2224"]
}
I can currently get documents that match a specific array size:
db.accommodations.find({ name : { $size : 2 }})
This correctly returns the documents with 2 elements in the name array. However, I can’t do a $gt command to return all documents where the name field has an array size of greater than 2:
db.accommodations.find({ name : { $size: { $gt : 1 } }})
How can I select all documents with a name array of a size greater than one (preferably without having to modify the current data structure)?
Update:
For mongodb versions 2.2+ more efficient way to do this described by @JohnnyHK in another answer.
Using $where
db.accommodations.find( { $where: "this.name.length > 1" } );
But…
Create extra field
NamesArrayLength, update it with names array length and then use in queries:db.accommodations.find({"NamesArrayLength": {$gt: 1} });
It will be better solution, and will work much faster (you can create index on it).