首页 > 解决方案 > 如何在 mongodb 中使用 $elemmatch 比较两个数组?

问题描述

我需要比较两个数组以查找第一个数组中的所有元素是否与第二个数组匹配。

第一个数组:

var tasktime = [2,3,4];

第二个数组:

'working_days': [ 
                {
                    'slots': [ 8, 9, 14, 15 ]
                }
            ];

我需要检查“tasktime”数组中的所有元素是否存在于“slots”数组中。

以下是我尝试过但没有得到预期结果的查询。

var defaultCondition = [
                        {
                            query: {
                                "working_days": { $elemMatch: { slots: { $setIntersection: [ 'slots', tasktime ] } } }
                            }
                        }
                    ];

db.GetAggregation('tasker', defaultCondition, function (err, taskers) {
    if (err || !taskers[0]) {
        res.send({ count: 0, result: [] });
    } else {
        callback(err, taskers);
    }
});

在这方面需要某人的宝贵帮助。

标签: mongodbmongodb-query

解决方案


您需要使用$all来查找taskTime数组中的所有值。

你可以简单地做:

db.tasker.find({"working_days.slots" : {$all : taskTime}});

推荐阅读