Node.js 选择一个数组字段中的所有值都存在于另一个数组中的文档

Node.js 选择一个数组字段中的所有值都存在于另一个数组中的文档,node.js,mongodb,mongodb-query,aggregation-framework,Node.js,Mongodb,Mongodb Query,Aggregation Framework,我不太确定如何命名这个 所以我有一个产品ID数组 var productIds = [139,72,73,1,6] 还有MongoDB中的一堆客户文档 { name: 'James', products: [ 73, 139 ], _id: 5741cff3f08e992598d0a39b } { name: 'John', products: [ 72, 99 ], _id: 5741d047f08e992598d0a39e } 我希望在所

我不太确定如何命名这个

所以我有一个产品ID数组

var productIds = [139,72,73,1,6]
还有MongoDB中的一堆客户文档

{
    name: 'James',
    products: [ 73, 139 ],
    _id: 5741cff3f08e992598d0a39b
}

{
    name: 'John',
    products: [ 72, 99 ],
    _id: 5741d047f08e992598d0a39e
}
我希望在所有产品都出现在产品ID(ProductID)数组中时找到客户

我试过:

'products' : {
    '$in': productIds
}
但这会返回John,即使产品ID列表中不存在99

var productIds = [139,72,73,1,6]
我还尝试:

'products' : {
    '$all': productIds
}
因为没有一个客户拥有所有的产品,所以不返回任何内容

是否有一种方法可以在单个查询中实现我所需的功能,或者我必须进行一些查询后处理

我也试过了

'products': {
    '$in': productIds,
    '$not': {
        '$nin': productIds
    }
}
但是,当并非所有产品ID都匹配时,这似乎也会返回客户。您可以使用该方法和运算符执行此操作。在表达式中,需要使用,以便检查“products”数组中的所有元素是否都在“ProductId”中。这是因为不能在条件表达式中使用

var productIds = [139,72,73,1,6];
db.customers.aggregate([ 
    { "$redact": { 
        "$cond": [ 
            { "$setIsSubset": [ "$products", productIds ] },
            "$$KEEP",
            "$$PRUNE" 
        ] 
    }} 
])