Reputation: 1133
I have the following simplified collection: (consider all street_names
are quoted)
{
city_id: 1,
city_name: "city1",
streets: [
{
street_id: 1,
street_name: street1
},
{
street_id: 2,
street_name: street2
},
{
street_id: 3,
street_name: street3
},
{
street_id: 4,
street_name: street4
},
{
street_id: 5,
street_name: street5
}
]
},
{
city_id: 2,
city_name: "city2",
streets: [
{
street_id: 1,
street_name: street1
},
{
street_id: 2,
street_name: street2
},
{
street_id: 3,
street_name: street3
},
{
street_id: 4,
street_name: street4
},
{
street_id: 5,
street_name: street5
},
{
street_id: 6,
street_name: street6
},
{
street_id: 7,
street_name: street7
}
]
}
Is there a way to query the collection in a way that will return only sub-documents that match a certain name regexp
?
For example:
Get all sub-documents with street_name
that contains " " (3 spaces) in them.
Upvotes: 0
Views: 55
Reputation: 9473
The procedure when using aggregation framework will look like:
{$match:{"streets.street_name":"/REGEX_EXPRESSION_HERE/"}}
{$unwind:"$streets"}
{$match:{"streets.street_name":"/REGEX_EXPRESSION_HERE/"}}
{$project: {_id:0, "street_id": "$streets.street_id", street_name":"$streets.street_name", city_id:1 }}
--before edit
You can use regex in filter expression
db.collection.find({"streets.street_name":"/REGEX_EXPRESSION_HERE/"})
Upvotes: 1