arr=[{field1:,field2:
I want to use the $in
operator against the field1
of arr
. I
You need to use dot notation to select fields in the array:
db.coll.find({"arr.field1" : { $in : [ 'value1', 'value11' ]}});
This query will return all documents where array arr
contains at least one subdocument that has a field field1
with values value1
or value11
.
Edit
Regarding your edit, you can't use $in operator that way.
From the documentation:
The $in operator selects the documents where the value of a field equals any value in the specified array.
If you send an array of objects in the $in query it will match document where specified field contains that object:
db.coll.find({ a: { $in : [ { b : 1, c: 1}, { b : 2, c: 2} ]}});
Will find this documents:
{
_id : ...
a: { b : 1, c: 1}
}
{
_id : ...
a: { b : 2, c: 2}
}
To get what you really want, easiest way to query is to extract the values from your array of objects and do a query with the created array of values.