Mongodb $in against a field of objects of array instead of objects of array

前端 未结 3 1936
北恋
北恋 2021-02-19 13:22
arr=[{field1:,field2:

I want to use the $in operator against the field1 of arr. I

3条回答
  •  梦如初夏
    2021-02-19 13:42

    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.

提交回复
热议问题