简体   繁体   中英

Mongo find documents where array contains x values of given array

I have a collection which has documents like that one. The entity field is not set in each document and has different values:

{
    "_id" : ObjectId("5388cfbdec82ba7cd5438635"),
    "name" : "Name1",
    "entity" : [ 
        "Entity1", 
        "Entity2", 
        "Entity4",
        "Entity5"
    ]
}

Now I want to find all documents which contains exactly x values of the given array : ["Entity1","Entity2","Entity3","Entity4"]

Expected result

For the document posted above the values Entity1, Entity2, Entity4 are matching:

  • x = 4 the document should not be found (3 matching values but x is 4)
  • x = 3 document should be found (3 matching -> size = x)
  • x = 2 the document should not be found (3 matching values but x is 2)
  • x = 1 the document should not be found (3 matching values but x is 1)

You can use .aggregate for this. This is probably what you're looking for:

var y = ["Entity1", "Entity2", "Entity3", "Entity4"];
db.col.aggregate([
    {
        $project :
        {
            _id : 1,
            name : 1,
            entity : 1,
            x : {
                $size : {
                    $ifNull: [{$setIntersection : ["$entity", y]}, []]
                }
            }
        } 
    },
    { $match : { x : 3 } }
]);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM